LoginSignup
1

More than 3 years have passed since last update.

【Git】HEADとは?git resetを例にして動きの確認【しょうたいふめい】

Posted at

「Gitでワークツリーとインデックスは分かった。」
「でも、そういえばHEADって何者?」
「なんかgit logとかで出てはくるよね…」

ここを理解していなかったのでまとめます。
そもそもHEADを見て見ぬ振りをしていました。

この概念の理解で各コマンドの理解が一段回進んだ実感があります!

誤り等あればご指摘頂けますと幸いです。

この記事が役立つ人

  • git resetとかでググった情報をそのまま使ってしまう
  • 結果、思ってたのと違う挙動を発して現在位置を見失いテンパる
  • Gitの構造が良く分かっていない
  • Git初心者

HEADってどういうもの?

解釈

今ココのコミットにいるよという情報

公式サイトの説明

「あなたが作業しているローカルブランチへのポインタ」

その他関連用語

インデックス

commit待ちの情報。
addすると変更される。

ワークツリー

自分のPC内の情報。
エディタで編集し、ファイルを保存したら変更される。

実際、状態はどう動くの?

git resetの各オプションでの理解が分かりやすいです。

過去の状態: Before
現在の最新状態: After
として、考えてみます。

今は全部Afterなので、こういう状態ですね。
- HEAD: After
- インデックス: After
- ワークツリー: After

解釈は、以下のようなイメージです。

のび太がしずちゃんに告白して失敗したシーンを例にします。

せっかく作戦を練ってプレゼントを渡したら成功するんじゃないかと考えたのに、失敗して過去に戻りたいというシチュエーションです。

  • HEAD プレゼントを渡して告白して失敗した後
  • インデックス プレゼントが完成している
  • ワークツリー プレゼントを渡す作戦を練り終わった
$ git reset --soft HEAD
  • HEAD: Before
  • インデックス: After
  • ワークツリー: After

【利用シーン】
直前のコミットのみを取り消す際に使う。
addした情報は残る。

【解釈】
しずちゃんに告白する直前に戻る。
「プレゼントの渡し方が悪かったんだ!渡し方を変えるために過去に戻ろう!」

  • HEAD プレゼントを渡す前
  • インデックス プレゼントが完成している
  • ワークツリー プレゼントを渡す作戦を練り終わった
$ git reset HEAD

※—mixedオプションをつけたのと同じ。
- HEAD: Before
- インデックス: Before
- ワークツリー: After

【利用シーン】
addしたのを取り消したい。
addしたファイルにも不備があることが分かった場合。

【解釈】
しずちゃんに告白する前の状態に戻り、かつ用意したプレゼントも変える。
「そもそもプレゼントが悪かったんだ!作り直そう!」

  • HEAD プレゼントを渡す前
  • インデックス プレゼントは作っていない
  • ワークツリー プレゼントを渡す作戦を練り終わった
$ git reset —hard HEAD
  • HEAD: Before
  • インデックス: Before
  • ワークツリー: Beofre

【利用シーン】
やらかした!全てなかったことにしたい!

【解釈】
そもそも作戦を練り直す。
「そもそも作戦自体が悪かったんだ!プレゼント渡すんじゃなくて他のこと考えよう!」

  • HEAD プレゼントを渡す前
  • インデックス プレゼントは作っていない
  • ワークツリー 作戦は白紙

まとめ

Gitは奥深いですね。

何回ものび太を頭の中でタイムスリップさせて構造の理解をしました。
今も頭の中で響きます。「ドラえもーーーーーーーん!」

参考にさせて頂いたサイト(いつもありがとうございます)

GitのHEADとは何者なのか - Qiita
いろいろモヤッとしていた git 初心者が腑に落ちるまで - Qiita
難しいGitコマンドは、仕組みから理解してみよう - Qiita
【永久保存版】Gitのあらゆるトラブルが解決する神ノウハウ集を翻訳した - LABOT 機械学習ブログ
Git - ブランチとは

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1