削除されたファイルのステージング


499

gitレポジトリにというファイルがあるとしますfoo

rm(ではなくgit rm)で削除されたとします。次に、gitステータスが表示されます。

Changes not staged for commit:

    deleted: foo

この個別のファイル削除をどのようにステージングしますか?

私が試した場合:

git add foo

それは言う:

'foo' did not match any files.

2
これは古いGitバージョンの問題でしたか?最近は1つではないようです。変更されたファイルと同様に機能します。
cst1992

回答:


22

Git 2.0.0以降、git addファイルの削除もステージングします。

Git 2.0.0ドキュメント-git-add

<パススペック>…

コンテンツを追加するファイル。Fileglobs(例:* .c)を指定して、一致するすべてのファイルを追加できます。また、先頭のディレクトリ名(たとえば、dir / file1およびdir / file2を追加するためのdir)を指定して、ディレクトリ全体の現在の状態と一致するようにインデックスを更新できます(たとえば、dirを指定すると、変更されたファイルdir / file1だけではなく、作業ツリーでは、ファイルdir / file2が作業ツリーに追加されますが、ファイルdir / file3も作業ツリーから削除されます。以前のバージョンのGitは削除されたファイルを無視していたことに注意してください変更されたファイルまたは新しいファイルを追加したいが、削除されたファイルは無視したい。


受け入れられた答えは問題を解決しません-そして他はGit 2.0.0以降より面倒です-これが最善の方法です!あなたは私のupvote持っている
ジョアン・アントゥネス

519

git rm foo削除するファイルをステージングするために使用します。(以前に削除されていなかった場合、ファイルシステムからファイルも削除されます。もちろん、以前にチェックインされていたため、gitから復元できます。)

ファイルシステムから削除せずにファイルを削除するためにステージングするには、次のコマンドを使用します。 git rm --cached foo


8
また、--cacheフラグを追加して、リポジトリからのみファイルを削除し、ファイルシステムにそのまま残すことができます。
Hauleth 2012

この操作を元に戻すプロセスは何ですか?つまり、削除のためにファイルのステージングを解除しますか?それは可能ですか?
longda

82
実際、OPはalready_deletedファイルをステージングする方法を尋ねましたが、これはで実行できますgit status | grep 'deleted:' | cut -d':' -f2 | xargs -t -I {} git add -u "{}"。他の回答は、ファイルの削除を正しくステージングする方法を示しているようです(ただし、削除済みのファイルをステージングする方法は示していません)。ps。xargsUbuntu 12.04では、ベースのコマンドが機能しますが、手動で実行git add -u deleted_file.txtすると機能しません。私のgitは1.7.9.5です
Dimitry K

8
@DimitryK:git rmファイルシステムからすでに削除されている場合でも、ファイルを削除用に喜んでステージングします。そして、別の回答に対するOPのコメントが示すように、彼らはすでに削除された特定のファイルをステージングしたいと考えていました。
Wooble

3
git rmすでに削除されたファイルをステージングしません。このエラーがスローされます:fatal: pathspec '~.SLDASM' did not match any files。以下が証明のある画面です:i.imgur.com/cKNKGGe.png i.imgur.com/1p9JdWF.png。最初のスクリーンショットは、2つのファイルが削除され、ステージングされていないことを明確に示しています。2番目のスクリーンショットは、と入力するとgit rm "~$Box.SLDASM"、このエラーがスローされることを示しています。
KulaGGin

413

使用するのは適切git rm [FILE]ですが、代わりに使用することもできますgit add -u

git-addドキュメントによると:

-u-更新

[FILE]に一致するエントリがすでにある場所でのみインデックスを更新します。これにより、作業ツリーと一致するようにインデックスエントリが削除および変更されますが、新しいファイルは追加されません。

-uオプションを使用するときに[FILE]を指定しないと、作業ツリー全体で追跡されているすべてのファイルが更新されます(古いバージョンのGitは、更新を現在のディレクトリとそのサブディレクトリに制限するために使用されていました)。

インデックスが更新され、ファイルが適切にステージングされます。


56
はいgit add -A .、すべての変更が追加されます。削除したファイルを1つステージングしたいと思いました。
Andrew Tomazos 2012

25
これにより、変更されたすべてのファイルが追加されます。削除されたファイルだけではありません。
Foreever

3
それは正しいです。より具体的には、削除されたか変更されたかにかかわらず、すでに追跡されているファイルのすべての変更をステージングします。これは、複数のファイルを削除し、それらを個別にステージングしたくない場合に役立ちます。
Sailesh 2014

9
削除されたファイルのみをステージングして変更しない方法はありますか?ちょっと興味があるんだけど。
2014年

11
私がやったgit add -u FolderWithDeletedFiles/、それは私が欲しいものをやった、ありがとう
議会

158

手動で削除したすべてのファイルをステージングするには、以下を使用できます。

git rm $(git ls-files --deleted)

このコマンドにエイリアスをとして追加するには、次のコマンドをgit rm-deleted実行します。

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'

2
$()の表記は、aparentlyにつながる、窓のbashのコンソールには存在しませんunknown option `deleted)
フェリックス・ガニオン-グルニエ

2
パスにスペースが含まれている場合も、これは機能しないと思います。少なくとも、私のシステム(zshを使用)では機能しません。
Wil Shipley

3
私には完璧に働きました!私が必要とするものを正確にやりました。ここに大きな感謝!
RedSands 2016

Windowsで行うfor /F %I in ('git ls-files --deleted') do git add -u %I
EIS

3
これはスペースを含むファイル名では機能しません。必要に応じて 'git add -u'は機能します。
J-Dizzle 2017年

33

すべての削除済みファイルを追加する

git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all

確認するためにチェックに感謝

git status

あなたは行ってもいいはずです


5
これが機能することを確認します。ここでの教訓はrm <file>、行うことではなく、むしろgit rm <file>
DanGordonの

1
参考:スペースを切り取ると、パスにスペースが含まれていると問題が発生します
davis

1
これはスペースを含むファイル名では機能しません。必要に応じて 'git add -u'は機能します。
J-Dizzle 2017年

上で私のために完全に動作しますgit version 2.15.2 (Apple Git-101.1)
Kalob Taulien

Linuxコンソールで完全に動作します!
Ahmed AMMOURI



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.