LoginSignup
253
182

More than 3 years have passed since last update.

【やっとわかった!】gitのHEAD^とHEAD~の違い

Last updated at Posted at 2017-03-24

20190502追記

  • わかりにくい表現を修正しました
  • 「おまけ」を追加しました

追記ここまで

そもそもHEADとは

現在チェックアウトしているブランチの先頭を指す。
ブランチの切り替えという動作は、「HEADの移動+ワークスペースのファイルの更新」で成り立っています。
詳しくはこちらを参照ください。→ Git のブランチ機能 - ブランチとは

~ (チルダ)

~世代前のコミットを指定できる。

^ (キャレット)

複数ある親コミットのなかからコミットを指定できる。

絵にしてみる

チルダ

スライド3.JPG
チルダ指定をすることで、コミットをさかのぼって指定ができます。
HEAD~と指定することで、HEADに対して1世代前のコミットを指定でき、HEAD~~と指定することでHEADの2世代前のコミットを指定できます。

キャレット

スライド2.JPG

キャレット指定をすることで、複数親がいる場合に、親コミットを指定できます。
複数親がいる状況は、2つのコミットをマージしたときに起きます。
HEAD^と指定することで一つ目の親を指定でき、HEAD^2と指定することで2つ目の親を指定できます。

HEAD~~とHEAD~2は同じだけど、HEAD^^とHEAD^2は違う

HEAD~~とHEAD~2は同じコミットを指しますが、HEAD^^とHEAD^2はそれぞれ違うコミットを指します。

スライド4.JPG

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~のままです)
  • 見出し中で「~~」を右上付き文字しようとしたらうまくいきませんでした。いったん「~ ~」のように間にスペースを入れた状態で保存して、その後スペースを消したらなぜかうまくいきました
253
182
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
253
182