この記事では以下の環境について書いています。
Mac OS X(10.11.3)
git version 2.3.1
HEADの指定
git show HEAD
HEADは現在のブランチの最新のコミットですが、HEAD~やHEAD^のようにすることでHEADの先祖を遡って指定することができます。
コミットには直系の親だけがいる場合と第二、第三の親(継父母?)などもいる場合があります。
コミットグラフが一本線の場合、遡りたい数だけ ~ をつければ指定したいコミットまでたどり着けます。また、HEAD~~~~~~~~~~~などとすると冗長になるのでHEAD~12という風に省略できます。
マージなどで履歴が枝分かれしている場合はHEAD^(1番目の親)、HEAD^2(2番目の親)という風に指定します。
はじめのうち混乱しやすいのは、HEAD~~(親の親)のようにHEAD^^としても1番目の親の1番目の親つまり、親の親なのでHEAD~~と結果が同じになるところでしょうか。一般的に4番目の親、5番目の親というようなものが出来ることは稀だと思うので必要なことは少なそうですが、そういう場合はHEAD^4、HEAD^5という風に記述します。(HEAD^^^^やHEAD^^^^^は別の意味)
指定方法 | 説明 | つまり... |
---|---|---|
HEAD~ | HEADの親 | 親 |
HEAD~1 | HEADの親 | 親 |
HEAD^ | HEADの親 | 親 |
HEAD~~ | HEADの親の親 | 祖父母 |
HEAD~2 | HEADの2代前の親 | 祖父母 |
HEAD^^ | HEADの1番目の親の1番目の親 | 祖父母 |
HEAD^2 | HEADの二番目の親 | 2番目の親 |
HEAD^2~~ | HEADの二番目の親の親 | 2番目の親の親 |
まとめ
HEAD~2とHEAD^2は違うコミットをさすが、HEAD~~とHEAD^^は同じコミットを指す。