gitの理解を妨げる要因のまとめ

雑多だが、一応まとめる。

  1. 変更不可完全追記式ストレージ
  2. スナップショット保存、差分管理はしない。差分は計算する。
  3. ロールバックやロールフォワードはしない。まるまるリストア。
  4. HEADが最新コミットを指すとは限らない。detached HEAD もある。
  5. ブランチラベルは容易に削除できる。ブランチの履歴は絶対に削除できない。
  6. 削除、改変、書き換えなどは「言葉のあや
  7. “リモートブランチ”はローカルリポジトリにある。
  8. 「追跡ブランチ」は追跡するブランチか、追跡されるブランチかハッキリしない。
  9. 「リモート追跡ブランチ」は意味がハッキリしている。
  10. 追跡する側のブランチは、追跡専用ブランチと通常ブランチがある。通常ブランチの追跡する対象ブランチは「上流ブランチ」というのかも知れない。
  11. 早送りマージは(狭義の)マージはしてない。
  12. スカッシュマージも(狭義の)マージはしてない。
  13. push と pull は非対称である。
  14. グラフのフラグメントと単純フラグメント(単一ヘッド、単一境界のフラグメント)を考える。
  15. 単純フラグメントの転送とグラフティングがリモートとのやり取りのすべて。
  16. リベースは歴史(履歴)の改変はしてない。ヘッドコミットからの可視性は変わる。
  17. リベースは一時的パッチを使う。
  18. プルリクエスト〈マージリクエスト〉はホスティングサービスが提供するコミュニケーション機能。
  19. ハブサーバーのリポジトリにワーキングツリーは不要。


行為と物が混同するから、行為を表す名詞に次を使う。

  • コミッティング〈committing〉 (コミット【名詞】ではない)
  • マージング
  • グラフティング〈grafting〉
  • トラッキング

物を表す言葉は:

  • コミット=コミットオブジェクト
  • ブランチ
    • ブランチラベル
    • ブランチヘッド
    • ブランチ履歴
    • ブランチ固有履歴
  • グラフのフラグメント
  • 単純フラグメント(ヘッドノードが1つ、境界ノードが1つあるフラグメント)

カレント概念

  • カレントコミット
  • カレントブランチ
  • カレントワーキングツリー(の状態)

グラフティングとトラッキング

  • フラグメント選択
  • フラグメント転送
  • フラグメントをグラフにグラフティング
  • ラベルの参照先更新〈移動〉
  • トラッキング専用ブランチ
  • トラックする側とトラックされる側

マージング

  • 早送り〈ファストフォワード〉
  • マージコミット
  • スカッシュ
  • リベース

意図・目的と手段を混同しない。