コミット ID やタグ名の後ろに特殊な記号を付けることで、そのコミットの数個前のコミットを表現することができます。チルダ (~) 1 つにつき、1 つ前のコミットを表します。
HEAD~ # 最新コミットの 1 つ前
HEAD~~ # 最新コミットの 2 つ前
HEAD~~~ # 最新コミットの 3 つ前
チルダの数が多くなってきた場合は、「チルダ (~) +数値」で同じことを表現できます。
HEAD~1 # 最新コミットの 1 つ前
HEAD~2 # 最新コミットの 2 つ前
HEAD~3 # 最新コミットの 3 つ前
# リビジョン 31df6e7 から、最新の 2 つ前のコミットまでのログ
$ git log 31df6e7~..HEAD~2
似たような記号にキャレット (^) があります。あるコミットの親が複数存在するとき、その親となるコミットを ^1、^2 のように識別できます。世代としては、どちらも一世代前のコミットを示していることに注意してください。HEAD^1 と HEAD~1 は結果的に同じコミット(一つ前のコミット)を指します。
HEAD^1 # 1 番目の親
HEAD^2 # 2 番目の親
チルダの場合と異なり、HEAD^2 と HEAD^^ は意味が違うことに注意してください。HEAD^2 は 2 番目の親(一世代前)ですが、HEAD^^ は 1 番目の親 (HEAD^) のさらに1 番目の親(二世代前)です。
キャレットとチルダは組み合わせて使用できます。
これは、3 世代前のコミットの 2 番目の親を表します(つまり 3 世代前のコミットでマージされている)。
o---o---o---o---o---HEAD
/
o---x- <== コレ
これは、2 番目の親の 3 世代前のコミットを表します(つまり最新のコミットでマージされている)。
o---o---o---o---HEAD
/
コレ ==> o---o---o---o-