[解決済み] GitのHEAD、作業ツリー、インデックスの違いは何ですか?
質問
GitにおけるHEAD、作業ツリー、インデックスの違いについて教えてください。
私が理解するところでは、これらはすべて異なるブランチの名前です。私の推測は正しいですか?
こんなものがありました。
ひとつの git リポジトリは任意の数のブランチを追跡することができますが、作業ツリーはそのうちのひとつ("current" あるいは "checked out" ブランチ)だけに関連付けられており、HEAD はそのブランチを指しているのです。
これは、HEADと作業ツリーは常に同じということでしょうか?
どのように解決するのですか?
これらのトピックに関する他の良い参考文献をいくつかご紹介します。
<ブロッククオート私は、インデックスを チェックポイント .
うまくいかないかもしれない変更を加えようとするとき、つまり、概念的に難しいリファクタリングや表現型の変更など、やり通せるかどうか、それが良いアイデアかどうかさえわからない方向性を探りたいとき、私は自分の作業をインデックスにチェックポイントするのです。
前回のコミット以降に行った最初の変更であれば、ローカルリポジトリをチェックポイントとして使うことができますが、多くの場合、1つのコンセプトの変更を小さなステップのセットとして実装しています。
各ステップの後にチェックポイントを行いたいのですが、動作するテスト済みのコードに戻るまでコミットを保存しておきます。
注意事項
-
その ワークスペース は、あなたが見たり編集したりする(ソース)ファイルのディレクトリツリーです。
-
は インデックス は、単一の大きなバイナリファイルであり
<baseOfRepo>/.git/index
これは、現在のブランチにあるすべてのファイル、それらの sha1 チェックサム、タイムスタンプ、ファイル名 -- これは、ファイルのコピーが格納されている別のディレクトリではありません。 -
は ローカルリポジトリ は隠しディレクトリ(
.git
を含む)。objects
ディレクトリに、レポ内のすべてのファイルのバージョン(ローカルブランチとリモートブランチのコピー)が圧縮された "blob" ファイルとして格納されます。
上の画像で表現されている4つの「ディスク」を、レポファイルの個別のコピーと考えないでください。
<ブロッククオートこれらは基本的に、Gitのコミットに対する名前付き参照です。タグとヘッドの二種類に大別されます。
- タグは、例えばv2.6.29のように、歴史上の特定の点をマークする固定参照です。
- 逆にヘッドは、プロジェクト開発の現在位置を反映して常に移動しています。
(注)
コメント
によって
ティモ・フオヴィネン
この矢印はコミットが指しているものではありません。
ワークフローの順序
という矢印が表示されます。
1 -> 2 -> 3 -> 4
ここで
1
は最初のコミットで
4
は最終)
これで、プロジェクトで何が起こっているのかがわかりました。
しかし、ここで何が起こっているかを知るために、今現在、HEADという特別な参照があります。これは大きく分けて2つの目的があります。
- チェックアウトするときに、どのコミットからファイルを取得するかをGitに伝える。
- は、コミットしたときに新しいコミットをどこに置くかを Git に伝えます。
を実行すると
git checkout ref
を指しています。
HEAD
を指定し、そこからファイルを抽出します。また
git commit
は新しいコミットオブジェクトを作成し、それは現在の
HEAD
. 通常
HEAD
はどちらかのヘッドを指しているので、すべてうまくいきます。
関連
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] git add -A」と「git add .」の違い。
-
[解決済み] .gitignoreと.gitkeepの違いは何ですか?
-
[解決済み] Git のブランチの一覧を最新のコミット順に表示するにはどうしたらよいですか?
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] git stash popとgit stash applyの違いについて
-
[解決済み] GitのHEAD^とHEAD~の違いは何ですか?
-
[解決済み】Gitで複数のコミットの著者名やコミッター名、Eメールを変更する方法は?
-
[解決済み】git switchとgit checkoutの違いは何ですか<branch>?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] masterブランチと'origin/master'が分岐している、'undiverge'ブランチの方法は?
-
[解決済み】gitがローカルバージョンをリモートバージョンに置き換える
-
[解決済み] .gitignore と "以下の追跡されていない作業ツリーファイルはチェックアウトによって上書きされるでしょう"
-
[解決済み] 単一ファイルのハードリセット
-
[解決済み] ローカルの未コミットの変更を別のGitブランチにマージするには?
-
[解決済み] Git リポジトリがデタッチド HEAD 状態になったのはなぜですか?
-
[解決済み】gitで複数のステージを入力するとフェイタルエラーが発生する件
-
[解決済み] なぜgitはパスによるハード/ソフトリセットを行えないのですか?
-
[解決済み】GitのHEADとORIG_HEAD
-
[解決済み】Gitで複数の作業ディレクトリを作成できますか?