Git は紛らわしいという評判です。用語や言い回しが意味するものと、そこから想像する挙動が違ってユーザーが混乱すると言われます。これは、git cherry-pick や git rebase のような「履歴を書き換える」コマンドに最も顕著です。私の経験では、この混乱の根本的な原因は、コミットは 差分 であり順番を入れ替えることができるという解釈にあります。しかし、コミットはスナップショットであって、差分ではありません! Git がリポジトリデータをどのように保存しているかを見てみると、Git を理解しやすくなります。このモデルを調べた後に、この新しい視点が git cherry-pick や git rebase のようなコマンドを理解するのにどのように役立つのかを探っていきます。 本当に深く 掘り下げたいのであれば、Pro Git という書籍の Git Internals の章を読むと
![コミットはスナップショットであり差分ではない](https://cdn-ak-scissors.b.st-hatena.com/image/square/6e0e94093e06b77d1f78237ee64a389f78ea0e78/height=288;version=1;width=512/https%3A%2F%2Fgithub.blog%2Fjp%2Fwp-content%2Fuploads%2Fsites%2F2%2F2021%2F01%2Fcommits-are-snapshots-not-diffs.png%3Ffit%3D1200%252C630)