Git の HEAD、作業ツリー、インデックスの違いを教えていただけますか?
私の理解では、それらはすべて異なるブランチの名前です。私の推測は正しいでしょうか?
私はこれを見つけました:
単一の Git リポジトリは任意の数のブランチを追跡できますが、作業ツリーはそのうちの 1 つのブランチ (「現在の」または「チェックアウトされた」ブランチ) のみに関連付けられ、HEAD はそのブランチを指します。
これは、HEAD と作業ツリーが常に同じであることを意味しますか?
ベストアンサー1
これらのトピックに関する他の参考資料をいくつか紹介します。
インデックスをチェックポイントとして使用します。
失敗する可能性のある変更を行おうとしているとき、つまり、概念的に要求の厳しいリファクタリングや表現タイプの変更など、実行できるかどうか、あるいは良いアイデアであるかどうかさえわからない方向性を探りたいときは、作業内容をインデックスにチェックポイントします。
これが前回のコミット以降に行った最初の変更である場合、ローカル リポジトリをチェックポイントとして使用できますが、多くの場合、一連の小さなステップとして実装している概念的な変更が 1 つあります。
各ステップの後にチェックポイントを作成しますが、機能するテスト済みのコードに戻るまでコミットを保存します。
ノート:
ワークスペースは、表示および編集する (ソース) ファイルのディレクトリ ツリーです。
インデックスは、 内の単一の大きなバイナリ ファイルであり
<baseOfRepo>/.git/index
、現在のブランチ内のすべてのファイル、そのsha1チェックサム、タイム スタンプ、およびファイル名がリストされます。ファイルのコピーが含まれる別のディレクトリではありません。ローカルリポジトリは、リポジトリ内のすべてのファイルのすべてのバージョン (ローカル ブランチとリモート ブランチのコピー) を圧縮された「blob」ファイルとして含むディレクトリを含む隠しディレクトリ (
.git
)です。objects
上の画像に示されている 4 つの「ディスク」を、リポジトリ ファイルの個別のコピーと考えないでください。
基本的には Git コミットの名前付き参照です。参照には、タグとヘッドという 2 つの主要なタイプがあります。
- タグは、履歴の特定のポイントを示す固定参照です (例: v2.6.29)。
- それどころか、プロジェクト開発の現在の位置を反映するために、ヘッドは常に移動されます。
(注:コメントしたによるティモ・フオヴィネンこれらの矢印はコミットが指しているものではなく、ワークフローの順序であり、基本的に矢印は最初のコミットが1 -> 2 -> 3 -> 4
どこにあるか、最後がどこにあるかを示しています。1
4
これで、プロジェクトで何が起こっているかがわかりました。
しかし、ここで何が起こっているかを知るには、HEAD と呼ばれる特別な参照が必要です。これは、主に 2 つの目的を果たします。
- Gitにチェックアウト時にどのコミットからファイルを取得するかを伝え、
- コミット時に新しいコミットを配置する場所を Git に指示します。
実行すると、指定した ref を
git checkout ref
指し、そこからファイルを抽出します。実行すると、新しいコミット オブジェクトが作成され、これが current の子になります。通常はヘッドの 1 つを指しているので、すべて正常に動作します。HEAD
git commit
HEAD
HEAD