たとえば、ファイルを配置できる場所は、ツリー、インデックス、作業コピーの3つです。ファイルをフォルダーに追加するだけで、作業コピーに追加されます。
git add fileインデックスに追加するようなことをしたとき。そして、コミットすると、ツリーにも追加されます。
おそらく、git resetの3つの一般的なフラグを知るのに役立ちます。
git reset [- <mode>] [ <commit>]
このフォームは、現在のブランチヘッドをにリセットし<commit>、場合によってはインデックス(のツリーにリセットする<commit>)と作業ツリーを更新します<mode>。これは、次のいずれかにする必要があります
。--soft
インデックスファイルや作業ツリーにはまったく触れません(ただし<commit>、すべてのモードと同様に、ヘッドをにリセットします)。これにより、変更されたすべてのファイルが「コミットされる変更」のままになります。
-混合
インデックスをリセットしますが、作業ツリーはリセットしません(つまり、変更されたファイルは保持されますが、コミットのマークは付けられません)。更新されていないものを報告します。これがデフォルトのアクションです。
- ハード
インデックスと作業ツリーをリセットします。以降の作業ツリーで追跡されているファイルへの変更<commit>は破棄されます。
さて、あなたのような何かをするときgit reset HEAD-あなたが実際にやっていることでgit reset HEAD --mixedあり、それはあなたが(を経由してインデックスに変更を加える/ファイルの追加を開始する前にそれがあった状態にインデックス「リセット」されますgit add)この場合、作業コピーとではインデックス(またはステージング)は同期していましたが、リセット後にHEADとインデックスを同期させました。
git rm一方、作業ディレクトリとインデックスからファイルを削除し、コミットすると、ファイルもツリーから削除されます。git rm --cachedただし、ファイルはインデックスからのみ削除され、作業コピーに保持されます。これは、この場合とは正反対ですgit add file 。この場合、HEADおよび作業中とは異なるインデックスを作成し、HEADには以前にコミットされたバージョンのファイルがあり、作業コピーには、HEADのコンテンツまたはファイルとインデックスからファイルを削除した。コミットすると、インデックスとツリーが同期され、ファイルが削除されます。
git rm --cachedgit diffgit diff --cachedgit statusUntracked