日々常々

ふつうのプログラマがあたりまえにしたいこと。

Gitの相対的にコミットを指定するためのアレ

GitのコミットはSHA1で識別されますが、それをいちいち指定してるとやってられないので、なんかそれっぽい名前で代用できたりします。よく使われるのはブランチ名(master とか)やタグ名で、他にはHEADとかその辺の特殊なアレもありますね。この辺はブランチ名に対するショートカットくらいに捉えとくのがわかりよいと思います。
で、これらは所詮、一つのコミットにしか対応しないので、そこから辿って……となると相対的な指定の方法が必要になります。それが ~ と ^ です。記号なんでわかりにくいと感じるかもしれませんが、覚えてしまえば簡単です。覚えてしまえば。……覚えれるものだろうか?

とりあえず「マージしなければ ~ だけでおk」と開き直る事は出来ます。マージしないGitとはなんなのか。なんなんだろう。知らない。たぶんGit的な何かだとは思う。

とりあえず記号の後ろに量指定的な事が出来ます。で、1は省略出来ます。 ~は重ねても数字で指定しても同じです。^は重ねるのと数字で指定するので意味が変わります。ここはテストに出ます。

無理矢理日本語で説明すると世代と親になるかなぁ……。

  • ~ は世代
    • A~ で Aの一世代前
    • A~~ で Aの一世代前の一世代前
    • A~3 で Aの三世代前
  • ^ は番目の親
    • A^ で Aの一番目の親
    • A^^ で Aの一番目の親の一番目の親
    • A^3 で Aの三番目の親

図にある HEAD^3^^2 は HEADの【三番目の親】の【一番目の親】の【二番目の親】になる。うん……わからない。

だそく