git、言霊おそるべし

git、誤認誘導的表現 - (新) 檜山正幸のキマイラ飼育記 メモ編 の続き。

git merge --squash の説明がほとんど「複数のコミットをまとめてマージする」のようになっている。スカッシュ〈squash〉して合併する〈merge〉だから、そうなるが、これは単に言葉からの印象を述べている。

複数のコミットをまとめるような振る舞いはない。単に特定のコミットを現在のワーキングツリーとインデックス〈ステージングエリア〉に展開するだけ。git merge --squash はマージ作業はしてない。チェックアウト(あるいはリストア)操作になる。

現在のワーキングツリー&インデックスにチェックアウトされた状態を自分でコミットすると、結果的にマージングになる。

別ブランチの固有履歴が“捨てられる”のは、実際は、固有履歴が現在のコミットヘッドの履歴から外れるから。それだけのこと。実際は、履歴を構成するコミットもコミットメッセージも捨てられてない。

差分イメージを持っている人が、「別ブランチの差分達を連接して、カレントワーキングツリーのロールフォワードした」と説明している。ロールフォワードなんてしてない! gitはローリングはせずに、まるごとリストアする。