なんとなくGitを使ってるけど、「コミット」って何が起こってるのかよくわかんないなーって思ったこと、ない?😳わたしも最初は「ファイルを保存する感じ?」くらいにしか考えてなかったんだけど、調べてみたら意外とシンプルでおもしろかったんだよね💭
コミットの正体って?
Gitのコミットは、「ある時点のコードのスナップショット」を保存するものなんだ✨
「スナップショット」っていうのは、今のプロジェクト全体の状態をパシャっと写真に撮るイメージ。
でも、全部のファイルを丸ごとコピーしてるわけじゃなくて、変わった部分だけを効率よく記録しているから軽いんだよね💡
Gitの裏側でなにが起きてるかというと…
- ファイルの中身をまずハッシュ(SHA-1)に変換する
→ これでファイルのデータに「指紋」をつけるみたいな感じ🎀 - ハッシュに基づいてオブジェクトとしてGitの管理下に入れる
→ これがいわゆる「Blob」と呼ばれるもの🫶 - それらをまとめて「ツリー」として管理してる
→ フォルダの構造みたいにツリー状にファイルを整理する感じ🌸 - そして最後にそのツリーや親コミット情報をまとめてコミットオブジェクトを作る
→ これが「コミット」そのもの。言うなれば記録の箱🎁
こうしてできたコミットは、履歴としてずっとたどれるし、何がどう変わったかもGitが教えてくれるんだよね😆
なんでこんな仕組みが便利なの?
単純にファイルを保存するだけじゃなくて、変更点だけを効率的に記録するから履歴が軽くなる✨
しかも、ファイルの「指紋」を使ってるから、同じ内容なら重複して保存しないし、過去に戻ったり比較したりも超スムーズ🥺👍
あと、全部がデータの塊として記録されてるから改ざんされてないかのチェックもできるんだって。なんかちょっとセキュリティ面も考えられてて安心な感じするよね🔧✨
わかった気がするけど…難しい?
うん、最初はわかりにくいと思うよ!わたしも「ツリー?オブジェクト?」って混乱したし😳
でも、コミットは単に「今の状態をまるっと記録してる」って考えればOK✨
そこから、Gitがめっちゃ効率的にデータを管理してくれてるんだなーと思うと、ちょっと愛着湧いてくるかも?💗
Gitのコミットって、地味だけどちゃんと計算されてて無駄がない仕組みだったんだなーって思ったよ🧠👀
知ると少しGitが身近になる気がするから、もし気になったら調べてみてほしいな✨
コメント
ハンナ
GitはUXをもっと分かりやすくしてほしい、15年使っても`origin develop`と`origin/develop`の違いがよくわからない。
ハンナ
時々、「Gitは簡単で最高!」ってブログ見るけど、そんなことないからこのサイトがあるんだよね。
クリス
Gitがそのシンプルさをうまく隠してるのがすごい。
ノーラン
作者がハッシュはランダムだと思ってるって読んで、そこで読むのやめた。