LoginSignup
60
60

More than 5 years have passed since last update.

Gitで、HEAD^[n]とHEAD~[n]とHEAD@{[n]}の違いが分かってなかったので書いとく

Last updated at Posted at 2013-09-13

おそらくこんなかんじっぽい。
※ざっくり書いて公開しちゃったけど、もう少し詳しく補足しました(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]}とかで復旧することが可能らしいです(ぼくは幸いなことに、まだこれを利用する状況に陥ったことはないです)。

おわりに

何か起こったときにちゃんと対処できるように、このへんの違いを理解しとくとよさそうです。

参考

60
60
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
60