以下は私の現状の理解を整理したもので、内容の正しさを保証するものではありません。
Gitコマンドの全体構造
・Gitの入門書を2冊読んだがGitの静的な側面と動的な側面が十分に区別されておらず、当初理解に苦労した。
・静的な関係、ファイルのある状態が取りうる位置と、ある場所がその状態を取るためのコマンドを以下に示す
・動的な関係はgit log --graphで示される状態遷移図、ただしGitは動的な要素を持たない
以下覚書
・Gitが保存しているのはファイルではなくファイルの状態である※
・ということはGitはファイルを多様な状態を取りうるオブジェクトと理解している(書き込まれたものと書きこまれた内容は分離して管理されている)
・またgit log --graphで示される図は時系列での状態の変化を図にしたものということになる(主語がファイル)。
・git log --graphで示される図のエッジは時間的な前後関係をもとにしたものでユーザに規律を提供しない(例:cherry pickコマンド)だから、状態遷移図ではない。
※手当たり次第にテキストのコマンドを試していくうちにgitで保存されているものが状態だということは察しがついたものの、以下の記事を通じて公式で確認するまではそれらしい記事が検索に引っかからず確信が持てなかった。GITを習う人/教える人はこういったことに関心がないのだろうか
SVN脳患者から見たGit:https://qiita.com/kaityo256/items/81e7951a1ca2706955a4
で、Gitがコミットオブジェクトとして実際何を管理しているかというと、とりあえずこういうものなんだけれど、これをたとえばgit cherry-pickする際に「チェンジセット」としてとらえてよいと思ってたら、コメントで「Gitは状態を保存するのであって変更を保存するのではないからチェンジセットという言葉はGitで使うな」と公式に書いてあることを教えていただいた。もともとJoelが「チェンジセット」という言葉を使っていたのはMercurialを使っていたからで、そっちやBitkeeperは「チェンジセット」を保存するという気持ちになっているはず。そんなわけで、MercurialとGitをごっちゃにしてました。すみません。
Git 公式:https://git-scm.com/docs/gitglossary#gitglossary-aiddefchangesetachangeset
changeset
BitKeeper/cvsps speak for "commit". Since Git does not store changes, but states, it really does not make sense to use the term "changesets" with Git.