9

gitブックはgitインデックスを定義します:

Gitインデックスは、作業ディレクトリとリポジトリの間のステージング領域として使用されます。インデックスを使用して、一緒にコミットする一連の変更を構築できます。コミットを作成すると、コミットされるのは現在インデックスにあるものであり、作業ディレクトリにあるものではありません

しかし、私はまだそれを理解するのに苦労しています。特に、「コミットされたものは私の作業ディレクトリにあるものではない」という強調されたステートメントです。

これまでのところ、gitでの限られた作業では、次の場合、作業ディレクトリ内のすべてが常にコミットされます。

git add <all new files in the working directory>
git commit -a -m "git will refuse to commit without this comment" 

次に、gitはすべての変更されたファイルとすべての新しいファイルをコミットします。

それで、事実上、私の作業ディレクトリステージング領域ですか?

それでは、それが何であり、git indexそれがステージング領域としてどのように解釈されるのかはわかりません。

説明してもらえますか?

4

4 に答える 4

7

秘訣は次のとおりです。

インデックスに追加(git add)する場合、すぐにコミットする必要はありません

したがって、非常に複雑な関数を追加し、変更に進んで...最後に完全に壊しても、インデックスにあるもの(10分前に追加して、さらに失敗した変更で壊す前に追加したもの)があるため、コミットできます。現在作業ツリーにあるものではありません(現在、絶望的に壊れています)。

したがって、インデックスを作成した最後の「安定した」状態をいつでもコミットできることを知っているので、現在の開発作業をインデックスに追加するのに役立ちます。


コミットされるもう1つの方法は、作業ツリーにあるものではありませんgit add --patch

インデックスと作業ツリーの間でパッチの塊をインタラクティブに選択し、それらをインデックスに追加します。
これにより、ユーザーは、変更されたコンテンツをインデックスに追加する前に、違いを確認することができます。

現在のファイルの一部をインデックスに追加して(作成している3つの関数の1つなど)、それだけコミットできます。

于 2011-07-09T14:53:56.360 に答える
5

インデックスは、git が管理するディレクトリ ツリーのコピーです。最初は、HEAD コミットにあるもののコピーです。 git add作業ディレクトリからインデックスにファイルをコピーします。 git commitインデックスにあるものから新しいコミットを作成します。

インデックスはバッファのようなものです。git の履歴には保存されませんが、インデックスへのアクセスは git によって制御されます (さまざまな方法でアクセスできる作業ディレクトリとは異なります)。git はインデックスからコミットするので、コミットされるのは git が制御するものです。

于 2011-07-09T14:56:35.493 に答える
4

特定のケースでの答えは、ドキュメントを正しく理解しているが、「ショートカット」コマンドを使用して作業ディレクトリ全体をコミットすることです。

実行するgit commit -a -m "Message"と、作業ディレクトリはステージング領域のように扱われます。これは便利な場合もありますが、インデックスを設計どおりに使用できなくなります。次のコマンドを試してください。

git commit -m "Message"

代わりにこれを行うと、ステージング領域を使用して、作業ディレクトリに加えた変更の一部のみをコミットできます。

于 2011-07-09T14:59:02.033 に答える
3

インデックス/ステージング領域は作業ディレクトリではありません。これを確認するための簡単なテストを行うことができます。という名前の作業ディレクトリにファイルを作成しますfoo。ファイルにテキストを追加します。次に、実行しますgit add foo。もう一度編集fooして、さらにテキストを追加 (または削除) します。

実行するgit diff --cachedと (インデックスの内容が表示されます)、foo最初の編集とそれに続くgit add. 実行するとgit diff(作業ディレクトリで何が変更されたかがわかります) git add、.

于 2011-07-09T14:56:47.560 に答える