おそらくこんなかんじっぽい。
※ざっくり書いて公開しちゃったけど、もう少し詳しく補足しました(2013/09/15 17:13)
それぞれ説明してみる
HEAD^[n]
git log
で出力される変更履歴(コミットログ)を参照してる。
この場合のnは、「n番目の親コミット」の意。
git merge
とかした場合にマージ元となっている親ブランチが複数あった場合にnで指定してたどれるようです。
ぼくが使ってるリポジトリで試したらHEAD^2
くらいまでしか辿れなかったんで、あんまり使いどころ実感してないんですけど…
HEAD~[n]
git log
で出力される変更履歴(コミットログ)を参照してる。
この場合のnは、「n世代目の親コミット」の意。
基本的には(この場合は起点をHEADとして)git log
のタイムラインを遡るイメージでnを利用できます。要は、git show HEAD^^^^
とgit show HEAD~4
は同義。
HEAD@{[n]}
git reflog
を参照してる。Gitを操作した記録がなされてて、それベース。
reflogはHEADの動きを記録しているもので、Gitにトラッキングされているファイルの操作で何かミスをした場合にgit reset (--hard) HEAD@{[n]}
とかで復旧することが可能らしいです(ぼくは幸いなことに、まだこれを利用する状況に陥ったことはないです)。
おわりに
何か起こったときにちゃんと対処できるように、このへんの違いを理解しとくとよさそうです。
参考
- Git初心者が絶対に覚えておくべきコマンド - idesaku blog
- gitの相対的なコミットの指定、コミットの範囲指定方法 - Linux, Mac, Emacsについての設定、覚え書き
- Junio C Hamano: 入門Git, 秀和システム, 2009