Gitをもう少しきちんと理解するためにはHEAD、インデックス、ワークツリーをきちんと理解するとよい

以下を使って勉強したときの記録。

入門Git

入門Git

初心者Git使い(自分)としては「なんとなくgit便利そうだから使っていたんだけど、resetとかpullとかなんだかんだやってるとconflictよく起きるし毎回場当たり的に解決しているし結局面倒だなぁ」とか思っているうちに使わなくなってしまう...というのを何回かやってしまっていた。「ん、これってHEADとかいるんだっけ...」とかやっていると自分の手になじまなかったりしたと。

が、入門Gitを読んでいるうちに、そういう場当たり的な使い方をしているからいけないんじゃないかという気がしてきた。本の最初のほうで

  • HEAD
  • インデックス
  • ワークツリー

というそれぞれの違いがきちんと書いてある。この付近をちゃんと読むと、以下のような説明もちゃんと有機的に理解することができてよい。

コマンド 説明
git diff インデックスに記録した状態からワークツリーのファイルにさらにした変更
git diff --cached 最新のコミットと、インデックスに記録した状態間の変更
git diff HEAD 最新のコミットと、ワークツリー間の全ての変更

それぞれの違いは面倒なのでここでは書かないけど、gitの最初の付近でつまづいてしまう人はこの付近*1を抑えると理解が飛躍的に進むのではないかと思ったのでメモしておきます。この辺が分かればhelpを引いて意味が分かるようになるかと思う。

*1:blobオブジェクトとかtreeオブジェクト、commitオブジェクトなどの周辺も抑えるといいのかな