Edited at

GitのHEADをつかったコミットの指定方法

More than 3 years have passed since last update.

この記事では以下の環境について書いています。

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^^は同じコミットを指す。