web-dev-qa-db-ja.com

すでにディスクから削除されているGitリポジトリからの複数のファイルの削除

rm not git rm)を使って4つのファイルを削除したGitリポジトリがあり、Gitのステータスは次のようになります。

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

このように各ファイルを手作業で追加しなくても、Gitからこれらのファイルを削除する方法を教えてください。

git rm file1 file2 file3 file4

可能であれば、git add .と同じように機能するものを探しています。

1273
Codebeef

Git 1.xの場合

$ git add -u

これはgitに追跡ファイルを自動的にステージングするように伝えます - 以前に追跡されたファイルの削除も含みます。

Git 2.0の場合

作業ツリー全体をステージングするには:

$ git add -u :/

現在のパスだけをステージングするには:

$ git add -u .
2258
carl
git ls-files --deleted -z | xargs -0 git rm 

あなたが探しているものかもしれません..それは私のために動作します..

1345
Varinder

あなたが使用することができます

git add -u

削除したファイルをステージング領域に追加してからコミットする

git commit -m "Deleted files manually"
729
Cody Caughlan

あなたが単に実行した場合:

git add -u

gitはあなたが削除したファイルが実際に次のコミットの一部であるべきであることを知るためにそのインデックスを更新します。それから、その変更をチェックインするために "git commit"を実行することができます。

または、あなたが実行した場合:

git commit -a

それは自動的にこれらの変更を(そしてその他の変更も)反映してコミットします。

更新 :削除したファイルだけを追加したい場合は、

git ls-files --deleted -z | xargs -0 git rm
git commit
355
Emil Sit

あなたはおそらく-Aを探しています:

git add -A

これはgit add -uに似ていますが、新しいファイルも追加します。これは、hgのaddremoveコマンドとほぼ同等です(ただし、移動検出は自動です)。

165
Dustin

ステージングするには削除された ファイルのみ

for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done

または(xargsの方法)

git status | awk '/deleted/ {print $2}' | xargs git rm

後で使うのに便利なように、 alias 好みのコマンドセットを設定できます。

92
Saeb Amini
git rm test.txt

実際のファイルを削除する前後に。

61
Peaker

'--all'または '--update'オプションを指定してgit-addを使用すると、必要以上の効果が得られる可能性があります。新しいファイルや変更されたファイルもインデックスに追加されます。他のファイルに触れずにgitから削除されたファイルを削除したいときのためのbashエイリアス設定があります。

alias grma='git ls-files --deleted -z | xargs -0 git rm'

ファイルシステムから削除されたすべてのファイルは、削除済みとしてインデックスに追加されます。

48
zobie

それが本当に重要であるというわけではありませんが、私は選んだ答えに同意しません。

git add -u 

...作業ツリーの対応するファイルが削除されている場合、インデックスからファイルを削除しますが、追跡されたファイルの変更された新しい内容もステージングします。

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

...一方では、追跡された削除されたファイルだけをRMします。

だから私の見解では後者が良い選択肢です。

38
Stephan Tual

それらが唯一の変更であるならば、あなたは単にすることができます

git commit -a

すべての変更をコミットします。それは削除されたファイルを含みます。

29
SpoonMeiser
git ls-files --deleted | xargs git rm 

削除されたファイルのみを追加するのに最適なオプションです。

これは他のいくつかのオプションです。

git add .  => Add all (tracked and modified)/new files in the working tree.

git add -u => Add all modified/removed files which are tracked.

git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.

git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.
19
Sijo Kurian

git add -u

-u --update作業ツリーではなく、インデックス内のすでに追跡されているファイルに対してのみ一致します。つまり、新しいファイルはステージングされませんが、追跡対象ファイルの変更された新しい内容がステージングされ、作業ツリー内の対応するファイルが削除された場合はインデックスからファイルが削除されます。

Noが与えられた場合、デフォルトは "。"です。つまり、現在のディレクトリとそのサブディレクトリ内のすべての追跡ファイルを更新します。

15
Obay

その簡単な解決策は私にはうまくいきます:

git rm $(git ls-files --deleted)
14
Houssem Badri

あなたがそれをあなたの.gitconfigに追加したいならば、これをしてください:

[alias]
  rma = !git ls-files --deleted -z | xargs -0 git rm

それからあなたがしなければならないのは走ることだけです:

git rma
10
Evan Moran
git ls-files --deleted -z | xargs -0 git rm --cached

これにより、gitによって以前追跡されたすべての削除済みファイルが削除され、ファイル名にスペースが含まれている場合も処理されます。

あなたのPOSIXの変種によっては、xargs -0 -rを使う必要があるかもしれません:これは、nullコンテンツをパイプで送るとxargsを適切に終了させるでしょう。

編集:--cachedおよび--deletedフラグは、すでに削除されていないファイルを誤って削除しないようにするために、並行して使用されます。

8
Murphy Danger

実際に実行されているコマンドを確認するには-tを使用してください。

私はちょうど同じことをするためにVirenderの答えを微調整しました:

git ls-files --deleted -z | xargs -t -0 git rm
6

それを試してみてください。

-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.

git add . && git commit -m -a "Your commit"

または

git add --all && git commit -m "Your commit"
6
ilgam

述べたように

git add -u

削除のために削除されたファイルをステージングしますが、更新のためにファイルを修正しました。

変更したファイルをアンステージングするには

git reset HEAD <path>

コミットを整理して清潔に保ちたい場合。
注: 削除されたファイルもステージング解除される可能性があるため、これらのワイルドカードには注意してください。

5
DarkNeuron

Git-addのフラグはどれも削除されたファイルをステージングするだけではありません。あなたが変更したものがすべて削除されたファイルであるなら、それで大丈夫です、さもなければ、あなたはgit-statusを実行しそして出力を解析する必要があります。

ジェレミーの答えを元にして、これは私が得たものです:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. ファイルのステータスを取得します。
  2. 削除されたファイルの場合は、ファイルの名前を分離してください。
  3. #sで始まるすべての行と、その中にWordが「削除された」ステータス行を削除します。正確には覚えていませんし、もう存在しないので、状況に応じてこれを変更する必要があるかもしれません。式のグループ化はGNU特有の機能かもしれないと思うので、もしあなたがgnutilsを使っていなければ、あなたは複数のgrep -v行を追加しなければならないかもしれません。
  4. ファイルをgit rmに渡します。

これをシェルエイリアスに貼り付ける...

5
Xiong Chiamiov

処理するファイルがたくさんある場合でも、次のように動作します。

git ls-files --deleted | xargs git rm

あなたはおそらくコメントもコミットしたくなるでしょう。

詳細は、 便利なGitスクリプト を参照してください。

5
l3x
git commit -m 'commit msg' $(git ls-files --deleted)

私はすでにファイルを削除した後、これは私のために働きました。

4
Chad

私は同じものが必要で、git guiの "stage changed"ボタンを使いました。それはまたすべてを追加します。

そして「ステージが変わった」後に「コミット」しました….

だから私の作業ディレクトリはまたきれいです。

3
Serdar

削除したファイルのみをステージングするためにgit add -u <filenames>を使用できます。

たとえば、ファイルtemplates/*.tplを削除した場合は、git add -u templates/*.tplを使用します。

-uは、リポジトリには存在するが作業ディレクトリには存在しなくなったファイルを参照するために必要です。それ以外の場合、デフォルトのgit addは作業ディレクトリ内のファイルを探すことです。そこで削除したファイルを指定してもそれらは見つかりません。

2
thomasrutter

何かのようなもの

git status | sed -s "s/^.*deleted: //" | xargs git rm 

それをするかもしれません。

1
Jeremy French

(さらに別のバリエーション)

他のフォルダはそのまま残して、私はディスクファイルから1つの特定のフォルダからすでに削除されたすべてを削除したいと思いました。以下は私のために働いた:

git ls-files --deleted  | grep <folder-name> | xargs git rm
1
urban

削除されたファイルをステージングするためのシステムエイリアスをコマンドrm-allとして追加する

UNIXのalias rm-all='git rm $(git ls-files --deleted)'

ウィンドウdoskey rm-all=bash -c "git rm $(git ls-files --deleted)"

注意

Windowsにはbashがインストールされている必要があります。

1
Haris Krajina
git rm $(git ls-files -d)

git ls-filesコマンドによってリストされたすべてのファイルを削除します(-dは削除されたファイルのみを表示します)。ファイル名またはパスにスペースが含まれているファイルでは機能しませんが、覚えやすいです

1
A. Albershteyn

ビジュアルスタジオプロジェクト用

'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

削除されたファイルパスにスペースがある場合に便利です。

0
Sawyer