次の質問が一般的になりすぎないことを願っています。そうでない場合は教えてください。この投稿は他の場所に移行される可能性があります。それで、私はこの本当に良いドキュメント(10 ページの下部) を読んで、コミットはそれ自体がブランチと見なされる可能性があることを知りました。それはどのように言えますか?コミットはブランチの全履歴をどのようにサポートしますか (数学に関心のある人々にとって、コミットはあるツリーに対するフィブレーション (いわゆるブランチの履歴をサポートする) と考えることができます)
2 に答える
それは「ブランチ」の概念についての難解な議論だと思いますが、それはそれほど重要ではありません。
その結果、すべてのコミットは、HEADがそのコミットであるブランチを表します。通常のブランチとの違いは、ブランチ名(コミットのSHA-1)が不変であるということです。hash-as-branch-nameは、常にhash-as-commitを指します。
このコマンドで自分で試してみてください:(git checkout 2ae907
参照は以前のコミットへの参照です)。次のようなテキストが表示されます。
注:「2a9e07」を確認してください。
'切り離されたHEAD'状態にあります。周りを見回し、実験的な変更を加えてコミットすることができます。また、別のチェックアウトを実行することで、ブランチに影響を与えることなく、この状態で行ったコミットを破棄できます。
コミットはコミットのグラフに追加されるため、すべてのコミットは、以前のすべての履歴を含むサブグラフのルートになります。
git では、コミットには常にその時点でのツリーの完全な履歴が含まれます (その親コミットへの参照を含めることにより)。その意味では、枝と見なすことができます。唯一の違いは、ブランチにはシンボリック名があるため、ハッシュでブランチを参照する必要がないことです。