Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

おわりに

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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした