シアトル生活はじめました

20年以上すんだ東海岸から西海岸に引っ越してきました。MicrosoftのUniversal Storeで働いてます。

Git 履歴グラフ。 読み方を理解すると Git がよくわかる

Git コマンドライン

git log --graph

っと打つと、下のようなものが表示される。

f:id:watanabe_tsuyoshi:20151018035546p:plain

この例の場合、AliceとBobという二人の開発者がいくつか別々にコミットしている。話を簡単にするために、二人とも同じreadme.txtという名前のファイルに変更を加えたという設定にする。

時系列にそって二人の作業を表すと

10月15日に、Aliceがファイルにタイトルを加えた。

10月15日に、Aliceがファイルに段落を一つ加えた。

10月17日に、Bobがファイルにタイトルを加えた。

10月17日に、Bobがファイルに対して自分とAliceが加えた変更をマージして更新した。

マージコミット

最後にBobが行ったマージ・コミットと呼ばれる作業、グラフだとこんな感じで二つの線が合わさる点として表される。

 

f:id:watanabe_tsuyoshi:20151018034605p:plain

これは別に新たになにか機能を加えたのではなくて、別々のコミットを合わせる、っという作業のための独立したコミット。

緑色の線はAliceが加えた二つの変更点を時系列にそって示している。

f:id:watanabe_tsuyoshi:20151018034740p:plain

赤い線は、ずっとたどっていくとボブのコミットにたどり着く。

f:id:watanabe_tsuyoshi:20151018035639p:plain

コミット星の位置関係とその意味

星の位置関係は、ちょっと頭の中でグラフを書き直すと分かりやすい。

f:id:watanabe_tsuyoshi:20151018042639p:plain

とくにBobの最初のコミット(マージコミットじゃない方)が緑色の線を赤い線に変えている部分が重要。これはGit log コマンドが示すグラフだとちょっと分かりにくい。

そして、緑色の線の出発点であるコミット(一番下の星)がBogとAliceの共通の出発点である、ということの認識が重要。

グラフをアレンジし直すと、より現実に即していて直感的に理解しやすいかもしれない。

f:id:watanabe_tsuyoshi:20151018043329p:plain

なんでAliceの方が緑色の線を受け継いでいるの?

Aliceがすでに彼女のローカルブランチから、中央レポジトリの対象のブランチに、コミットをプッシュしてたから。

グラフは時系列とは限らない

グラフのアウトプットを見る際に気を付けるべき点。

日付を見ると、別々の線上のコミットは、必ずしも時系列になってはいない。

f:id:watanabe_tsuyoshi:20151018035755p:plain

ただし、それぞれの「線」の上でのコミットは時系列にそっている。

 グラフを正しく見るコツ

線の色に注意し、グラフのレイアウトを頭の中で少しづつ変えてながら考えてみる。

特に、ふたつの線の分かれ目の部分に気を付ける(上の場合Bobの最初のコミット)