web-dev-qa-db-ja.com

Gitのステージング領域から単一のファイルを削除して、インデックスから削除したり、ファイル自体への変更を元に戻したりしないにはどうすればよいですか?

状況: すでにインデックスにファイルがあるGitリポジトリがある。私はいくつかのファイルに変更を加え、Gitを開き、 "git add"でこれらのファイルを私のステージングエリアに追加します。

質問: /これらのファイルの1つをステージング領域から削除しても、インデックスから削除したり、ファイル自体の変更を元に戻したりしないでください。

1102
PHLAK

私が質問を正しく理解したならば、あなたは単にそのファイルに対して行われたgit addを "元に戻す"ことを望むでしょう。

ステージング領域から 単一ファイル を削除する必要がある場合は、次のコマンドを使用します。

git reset HEAD -- <file>

ステージング領域から ディレクトリ(フォルダ) 全体を削除する必要がある場合は、次のコマンドを使用します。

git reset HEAD -- <directoryName>

あなたの修正は保持されます。 git statusを実行すると、ファイルは修正されたものとして表示されますが、まだステージングされていません。

詳細は git resetのmanページ を参照してください。

1718
Tim Henigan
git rm --cached FILE

git rm -r --cached CVS */CVS
145
user335425

git reset <file>

以前にコミットしたかどうかにかかわらず動作します。

83
MTS

それでは、Tim Heniganの答えを少し微調整してみましょう。ファイル名の前に - を使う必要があります。これは次のようになります。

git reset HEAD -- <file>
51
GuerillaNerd
git reset filename.txt

Filename.txtを変更した場合は、誤ってステージングに追加したため、ステージングからファイルを削除したいが、変更内容を失いたくはありません。

14
Vlad Cioaba

ファイルへの変更のサブセットを削除したいだけの場合は、次のようにします。

git reset -p

または

git reset -p <file_name>

このコマンドは基本的にgit add -pの逆です。選択された変更をステージング領域から削除するだけです。誤って追加したものを「追加解除」するのに非常に便利です。

6
fede1024

特定のパターンに従ってファイルを削除したいときにgit rm --cachedを使用している場合は、file-globパターンも使用できます。

ここ を参照してください。

4
thilinarmtb

git statusを実行すると、Gitはどのようにアンステージングするかを教えてくれます。

Changes to be committed: (use "git reset HEAD <file>..." to unstage).

それでgit reset HEAD <file>は私のために働きました、そして、変化は触れられませんでした。

2
user4299998

あなたが欲しい:

  • 単一ファイルに影響

  • ステージング領域からファイルを削除する

  • 単一ファイルをインデックスから削除しない

  • 変更自体を元に戻さないでください

そして解決策は

git reset HEAD file_name.ext

または

git reset HEAD path/to/file/file_name.ext
2
Do Nhu Vy

あなたが多くの追跡されたファイルに変更を加えるが、それらのうちのいくつかをステージングしたいだけならば、

git add .

追跡されるすべてのファイルをステージングするため(常に自分だけに変更を残してリモートリポジトリにステージングしたくない場合があるため)、必ずしも望ましい(または推奨される)とは限りません。

たくさんのことをするのも理想的ではない

git add path/to/file1 path/to/file2

たくさんのディレクトリが入れ子になっていると(これはほとんどのプロジェクトで当てはまります) - いらいらします。

それがGit GUIが役に立つ時です(おそらく私がそれを使う時だけ)。 Git GUIを開くだけで、ステージングされたファイルセクションとステージングされていないファイルセクションが表示されます。ステージングしたいセクションからアンステージするファイルを選択して、を押します。

Ctrl+U(Windows用)

それらをステージング解除する。

1

@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内のファイルをステージングディレクトリ。つまり、この操作の後、ステージングディレクトリではなく、作業ディレクトリで変更が行われます。

0
Wulfric Lee