Gitその他

【Git】HEADとは何か?簡単に調べてみた【備忘録】

Git
この記事は約3分で読めます。

仕事中、先輩と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について何となく利用している部分をなくせるようにしていきたいですね。

参考

GitのHEADとは何者なのか - Qiita
最初に なんとなくでも使用できるGitですが実はとても奥深く複雑な構造をしています。 そんなGitを使い始めた時ほぼ全員が思う「HEAD」とは何者なのか説明したいと思います。 また合わせて「Branchとは」「detached...
Git - Gitの参照