gitでの「あの時のコミット」へのショートカット用キーワードいろいろ


Gitを使ってると、「あーあの時のコミットを参照したいなー」と思うことよくありますよね?
そんな時Gitには便利なショートカットというかキーワードみたいなものが利用できます。

今回はそのキーワード(と便宜上呼びます)を、基本的なものから、「あーこれ欲しかったんだよねー」的なものや、
正直何に使うのか良くわからないものまで色々見つかったのでメモ。

間違いや、よく分からないところについて知っている方がいらっしゃったら是非コメントください!

HEAD

最もメジャーかつ一番良く使いそうなやつです。
自分のローカル内のコミットも含めた上で、一番新しいリビジョンを指し示すことができます。

利用方法として一番ポピュラーなのは、 git resetgit revert を利用するときにヘッダ位置を指定するときですね。
~n^n 等と併用することが多いです。

例えば

git reset HEAD~1

とすれば、ローカル内のリビジョンを 最新から一つ前 の状態に戻すことができます。 HEAD~2 なら2つ前です。
無駄なコミットや間違ったコミットをとりあえず元に戻しちゃいたいときとかに良く使います。

FETCH_HEAD

実は今回の記事は個人的にこれを調べてて色々見つけたのがきっかけだったり。ずっと欲しかったんですこれ。
FETCH_HEAD は、 現在フェッチされているリモートブランチの最新リビジョン を習得できます。

用途としては、「色々ごちゃごちゃいじっちゃったけど結局これ全部自分の変更元に戻してリモートと同じクリーンな状態にしたいなぁ…」なんて時に使います。

git reset --hard FETCH_HEAD

これでスッキリです!
自分がローカルで行った変更やコミットだけが、綺麗さっぱり消えてくれます!

ORIG_HEAD

これはちょっと特殊で、 git merge 等の 大幅な変更 が入るようなコマンドが実行されるときに、
内部で自動的に記録しておいてくれるヘッダ番号らしいです。
どのようなコマンドの時にORIG_HEADが更新されるのかはわかっていませんが、
少なくとも git merge の際にはそれを記録するようなので、
これを使うことで、もし変なブランチをマージしてしまったとしても、以下のように簡単にマージ前の状態に戻すことができます。

git reset --hard ORIG_HEAD

いざマージしようとしたらCONFLICTを起こしちゃってぐちゃぐちゃになってしまった場合に、
とりあえず元に戻したい場合なんかにも使えるようです。

これでもうマージ怖くない!

MERGE_HEAD

これは git merge を行う際にマージ となるリビジョンを示しています。
うーん何に使うのか使い道が思い当たらない・・・。

CHERRY_PICK_HEAD

これも良くわからなかったです。
git cherry-pick 実行時の取得元のリビジョンを指してるのかなぁと思いますが…やはり使い道が分からない><;

一応ヘルプでの原文は

records the commit which you are cherry-picking when you run git cherry-pick.

となっています。

実はまだまだあるらしい

本記事下部に記載した参考リンクのStackOverFlow内では、gitのソースコードの中には、
さらにこの他にBISECT_HEAD, REVERT_HEAD, REJECT_NON_FF_HEAD 等というものもあるらしいという事が書かれています。
ただ公式にマニュアルとかがあるわけでは無いような気がするので、あまり乱用するのはよくないかもしれませんね。

参考

最後に

あまり英語が得意じゃないので、間違ってる事や、「他にもこんなイカした使い方があるぜ!」等々ありましたら
是非コメントにて教えて頂ければと思います