Git コマンドラインで
git log --graph
っと打つと、下のようなものが表示される。
この例の場合、AliceとBobという二人の開発者がいくつか別々にコミットしている。話を簡単にするために、二人とも同じreadme.txtという名前のファイルに変更を加えたという設定にする。
時系列にそって二人の作業を表すと
10月15日に、Aliceがファイルにタイトルを加えた。
10月15日に、Aliceがファイルに段落を一つ加えた。
10月17日に、Bobがファイルにタイトルを加えた。
10月17日に、Bobがファイルに対して自分とAliceが加えた変更をマージして更新した。
マージコミット
最後にBobが行ったマージ・コミットと呼ばれる作業、グラフだとこんな感じで二つの線が合わさる点として表される。
これは別に新たになにか機能を加えたのではなくて、別々のコミットを合わせる、っという作業のための独立したコミット。
緑色の線はAliceが加えた二つの変更点を時系列にそって示している。
赤い線は、ずっとたどっていくとボブのコミットにたどり着く。
コミット星の位置関係とその意味
星の位置関係は、ちょっと頭の中でグラフを書き直すと分かりやすい。
とくにBobの最初のコミット(マージコミットじゃない方)が緑色の線を赤い線に変えている部分が重要。これはGit log コマンドが示すグラフだとちょっと分かりにくい。
そして、緑色の線の出発点であるコミット(一番下の星)がBogとAliceの共通の出発点である、ということの認識が重要。
グラフをアレンジし直すと、より現実に即していて直感的に理解しやすいかもしれない。
なんでAliceの方が緑色の線を受け継いでいるの?
Aliceがすでに彼女のローカルブランチから、中央レポジトリの対象のブランチに、コミットをプッシュしてたから。
グラフは時系列とは限らない
グラフのアウトプットを見る際に気を付けるべき点。
日付を見ると、別々の線上のコミットは、必ずしも時系列になってはいない。
ただし、それぞれの「線」の上でのコミットは時系列にそっている。
グラフを正しく見るコツ
線の色に注意し、グラフのレイアウトを頭の中で少しづつ変えてながら考えてみる。
特に、ふたつの線の分かれ目の部分に気を付ける(上の場合Bobの最初のコミット)