20190502追記
- わかりにくい表現を修正しました
- 「おまけ」を追加しました
追記ここまで
そもそもHEADとは
現在チェックアウトしているブランチの先頭を指す。
ブランチの切り替えという動作は、「HEADの移動+ワークスペースのファイルの更新」で成り立っています。
詳しくはこちらを参照ください。→ Git のブランチ機能 - ブランチとは
#~ (チルダ)
~世代前のコミットを指定できる。
^ (キャレット)
複数ある親コミットのなかからコミットを指定できる。
絵にしてみる
チルダ
チルダ指定をすることで、コミットをさかのぼって指定ができます。
HEAD~と指定することで、HEADに対して1世代前のコミットを指定でき、HEAD~~と指定することでHEADの2世代前のコミットを指定できます。
キャレット
キャレット指定をすることで、複数親がいる場合に、親コミットを指定できます。
複数親がいる状況は、2つのコミットをマージしたときに起きます。
HEAD^と指定することで一つ目の親を指定でき、HEAD^2と指定することで2つ目の親を指定できます。
HEAD~~とHEAD~2は同じだけど、HEAD^^とHEAD^2は違う
HEAD~~とHEAD~2は同じコミットを指しますが、HEAD^^とHEAD^2はそれぞれ違うコミットを指します。
HEAD^2はHEADの2つ目の親を指しますが、HEAD^^はHEADの一つ目の親の一つ目の親を指します。
一方、HEAD~~とHEAD~2はどちらもHEADの2世代前のコミットを指します。
##おまけ
右上付き文字を書けなくて、「HEAD~」と表していたんですが、ちゃんと「HEAD~」と書けるようになりました!
以下のように書くことで、右上付き文字が書けます。
HEAD<sup>~</sup>
参考:http://danpansa.blog.jp/archives/21332987.html
ただし、以下の2点がこの表記だとうまくいきません。
- 記事のタイトル(タイトルはHEAD~のままです)
- 見出し中で「~~」を右上付き文字しようとしたらうまくいきませんでした。いったん「~ ~」のように間にスペースを入れた状態で保存して、その後スペースを消したらなぜかうまくいきました