gitにおけるHEADについて

gitについて色々トラブルに見舞われると余計にコマンドを使わなくてはいけなくて エラーメッセージ中に”HEAD”なんてワードも見えたりして… HEADって一体何でしょうか??

HEADとは現在のブランチの先頭を表す名前です。 もう少し難く説明すると現在の自分のローカルブランチを指すポインタです。 ポインタを使う言語に慣れている人にはこの説明のみですぐにイメージが掴めるでしょうか? とにかく、これを目印にGitは自分が作業してるブランチを区別しているのです。 例えば、

git branch hogehoge

で作ったブランチ(正確にはブランチを指す”hogehoge”という名前のポインタ)に

git checkout hogehoge

でポインタを動かしてようやくhogehogeというブランチに移動するという流れになっています。 更に、このHEADは相対的に指定することも可能です。コミットの指定をする時に ~(チルダ)を後ろに付け加えることで現在のHEADから何世代前の親かを指定することができます。 ^(キャレット)は、ブランチのマージで親が複数ある場合に、何番目の親かを指定することができます。 例えば、 HEAD~1^2と指定すると一世代前の二番目の親のコミットということになります。 ORIG_HEADで最新のHEADのひとつ前を表すことも出来ます。 HEADを理解しておけばresetコマンドとかも安心して使えそうです。