仕事中、先輩とGitの話をしている時に
私「pushする時、ブランチ名が長いと面倒ですよねー」
先輩「git push origin HEADすると楽っすよ!」
私「HEADって何だったっけ…?(そうなんですね〜)」
となったのでちょっと調べてみました。
HEADとは
HEAD
では、git branch (ブランチ名) を実行したときに、Gitはどうやって最後のコミットのSHA-1ハッシュを知るのでしょうか?
答えは、HEADファイルです。HEADファイルは、現在作業中のブランチに対するシンボリック参照です。 通常の参照と区別する意図でシンボリック参照と呼びますが、これには、一般的にSHA-1ハッシュ値ではなく他の参照へのポインタが格納されています。
https://git-scm.com/book/ja/v2/Git%E3%81%AE%E5%86%85%E5%81%B4-Git%E3%81%AE%E5%8F%82%E7%85%A7
結論から言うと、HEADとは自分が作業をしているブランチを示すポインタです。
HEADがブランチを指すことで自分が現在いるブランチがどれか確認できる仕組みになっています。
ブランチを変更したらHEADの位置も変更したブランチに切り替わります。
git push origin HEADとは
git push origin HEAD
A handy way to push the current branch to the same name on the remote.
https://git-scm.com/docs/git-push#Documentation/git-push.txt-codegitpushoriginHEADcode
直訳すると「現在のブランチをリモートの同じ名前にプッシュする便利な方法」です。
リモートの同じ名前とありますが、リモートに同名がない場合は現在のブランチ名でpushしてくれるので大丈夫です。
$ git push origin 現在のブランチ名
上記のように現在のブランチ名を入力する手間暇が省ける、間違ったブランチ名を入力する可能性が減るので便利ですね。
余談ですが、git push origin HEAD:{任意のブランチ名}で現在のブランチから任意のブランチ名でpushすることも出来ます。
まとめ
GitのHEADについてちょっと理解することが出来ました。
Gitについて何となく利用している部分をなくせるようにしていきたいですね。