gitの相対的なコミットの指定、コミットの範囲指定方法
^、~の違いがよくわからなかったので、調べた。
相対的なコミット指定方法
^を用いる方法
主にブランチをマージしたコミットの場合に用いる。
マージしたコミットの場合、以下のように親が2つ以上いることがある。
この際にHEAD^1とすることで一つ目の親、HEAD^2とすることで2つ目の親を指定することができる。
○ー○
○/
~を用いる方法
常に一番目の親を指定する。
まとめ
つまり、HEAD^1とHEAD~1は同じものを指している。これだから混乱してたんだな^^;
範囲指定
ダブルドット
git log [branchname]..[branchname2]
これで[branchname2]にしか含まれていないコミットが抜き出せる。
git log [branchname2] --not [branchname] git log [branchname2] ^[branchname]
としても同じ効果が得られる。
これは2つのブランチを指定しているが、3つ以上の場合は
git log [branch1] --not [branch2] [branch3] git log [branch1] ^[branch3] ^[branch3]
などと指定すれば、上の場合は[branch1],[branch3]には含まれているが、[branch2]には含まれていないコミットが取り出せる。
下の場合には[branch1]には含まれているが、[branch2],[branch3]には含まれていないコミットを取り出せる。
トリプルドット
git log [branch]...[branch1]
これは[branch][branch1]の両方に存在しないコミットを取り出せる。
git log --left-right [branch]...[branch1]
とするとどっちのコミットかわかるようになる.