最終更新:
【仕組み解説】Gitはどうやってファイルの履歴を管理しているのか — 内部構造を図解
.gitフォルダの中には何が入ってるの?
blob、tree、commitの3つで全部管理してるってこと?すごくシンプルだね!
そうなんだ。しかもすべてのオブジェクトはSHA-1ハッシュっていう40文字の英数字で識別されてるよ。ファイルの中身が同じなら必ず同じハッシュになるから、重複を自動的に排除できるし、データが壊れてないかも検証できる。git logで見える「a1b2c3d...」みたいなのがまさにこのハッシュだね。
じゃあブランチって何なの?ファイルのコピーを作ってるわけじゃないよね?
えっ、たった1行のファイルなの!?じゃあHEADっていうのは?
マージするときは何が起きてるの?
rebaseっていうのもあるよね?マージとどう違うの?
もし間違えてresetしちゃったらどうしよう…?
そんなときはreflogが助けてくれるよ。「git reflog」を実行すると、HEADが過去に指していたコミットの履歴が全部見られるんだ。resetやrebaseで消えたように見えるコミットも、reflogにはしばらく残ってる。「git reset --hard HEAD@(2)」のように指定すれば復元できるよ。
reflogがあれば安心だね!Gitって見えないところですごく賢い仕組みになってるんだなあ。