状況: すでにインデックスにファイルがあるGitリポジトリがある。私はいくつかのファイルに変更を加え、Gitを開き、 "git add"でこれらのファイルを私のステージングエリアに追加します。
質問: /これらのファイルの1つをステージング領域から削除しても、インデックスから削除したり、ファイル自体の変更を元に戻したりしないでください。
私が質問を正しく理解したならば、あなたは単にそのファイルに対して行われたgit add
を "元に戻す"ことを望むでしょう。
ステージング領域から 単一ファイル を削除する必要がある場合は、次のコマンドを使用します。
git reset HEAD -- <file>
ステージング領域から ディレクトリ(フォルダ) 全体を削除する必要がある場合は、次のコマンドを使用します。
git reset HEAD -- <directoryName>
あなたの修正は保持されます。 git status
を実行すると、ファイルは修正されたものとして表示されますが、まだステージングされていません。
詳細は git reset
のmanページ を参照してください。
git rm --cached FILE
、
git rm -r --cached CVS */CVS
git reset <file>
以前にコミットしたかどうかにかかわらず動作します。
それでは、Tim Heniganの答えを少し微調整してみましょう。ファイル名の前に - を使う必要があります。これは次のようになります。
git reset HEAD -- <file>
git reset filename.txt
Filename.txtを変更した場合は、誤ってステージングに追加したため、ステージングからファイルを削除したいが、変更内容を失いたくはありません。
ファイルへの変更のサブセットを削除したいだけの場合は、次のようにします。
git reset -p
または
git reset -p <file_name>
このコマンドは基本的にgit add -p
の逆です。選択された変更をステージング領域から削除するだけです。誤って追加したものを「追加解除」するのに非常に便利です。
特定のパターンに従ってファイルを削除したいときにgit rm --cached
を使用している場合は、file-globパターンも使用できます。
ここ を参照してください。
git status
を実行すると、Gitはどのようにアンステージングするかを教えてくれます。
Changes to be committed: (use "git reset HEAD <file>..." to unstage).
それでgit reset HEAD <file>
は私のために働きました、そして、変化は触れられませんでした。
あなたが欲しい:
単一ファイルに影響
ステージング領域からファイルを削除する
単一ファイルをインデックスから削除しない
変更自体を元に戻さないでください
そして解決策は
git reset HEAD file_name.ext
または
git reset HEAD path/to/file/file_name.ext
あなたが多くの追跡されたファイルに変更を加えるが、それらのうちのいくつかをステージングしたいだけならば、
git add .
追跡されるすべてのファイルをステージングするため(常に自分だけに変更を残してリモートリポジトリにステージングしたくない場合があるため)、必ずしも望ましい(または推奨される)とは限りません。
たくさんのことをするのも理想的ではない
git add path/to/file1 path/to/file2
たくさんのディレクトリが入れ子になっていると(これはほとんどのプロジェクトで当てはまります) - いらいらします。
それがGit GUIが役に立つ時です(おそらく私がそれを使う時だけ)。 Git GUIを開くだけで、ステージングされたファイルセクションとステージングされていないファイルセクションが表示されます。ステージングしたいセクションからアンステージするファイルを選択して、を押します。
Ctrl+U
(Windows用)
それらをステージング解除する。
@CB Baileyがコメントしたように、おそらくindexの概念と混同されたと思います。
ステージング領域はインデックスです。
単にステージングディレクトリとindexを同じものと考えることができます。
だから、 @Tim Heniganの答えのように 、私は思います:
そのファイルに対して行われた
git add
を単に「元に戻す」だけです。
これが私の答えです:
一般に、stage操作を元に戻す方法は2つあります。
git reset HEAD <file>
そして
git rm --cached <file>
しかし、違いは何ですか?
ファイルはstagedで作業ディレクトリにも存在すると想定します。ファイルをstaging directoryから削除する場合はgit rm --cached <file>
を使用し、workingディレクトリに保存します。ただし、この操作を行うとstaging directoryからファイルが削除されるだけでなく、staging directory内でdeleted
としてマークされます。
git status
この操作の後、これがわかります。
deleted: <file>
ステージングディレクトリからファイルを削除した記録です。その記録を残したくなく、単にファイルの前のステージ操作を元に戻したい場合は、代わりにgit reset HEAD <file>
を使用してください。
--------回答の終わり--------
シモンズ:私はいくつかの答えが言及されているのに気づいた:
git checkout -- <file>
このコマンドは、ファイルがstagedされていて、ステージング後にworking directory内でファイルが変更されている場合に使用します。この操作を使用してworking directory内のファイルをステージングディレクトリ。つまり、この操作の後、ステージングディレクトリではなく、作業ディレクトリで変更が行われます。