web-dev-qa-db-ja.com

Gitリポジトリで削除された複数のファイルを削除する方法

一部のファイルを削除しましたが、git statusは次のように表示されます。

私はコミットしてプッシュしました。

GitHubは、リポジトリ内の削除されたファイルを引き続き表示します。 GitHubリポジトリ内のファイルを削除するにはどうすればよいですか?

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    modules/welcome/language/english/kaimonokago_lang.php
#   deleted:    modules/welcome/language/french/kaimonokago_lang.php
#   deleted:    modules/welcome/language/german/kaimonokago_lang.php
#   deleted:    modules/welcome/language/norwegian/kaimonokago_lang.php

git rmを使用すると、次のようになります。

usage: git rm [options] [--] <file>...

-n, --dry-run         dry run
-q, --quiet           do not list removed files
--cached              only remove from the index
-f, --force           override the up-to-date check
-r                    allow recursive removal
--ignore-unmatch      exit with a zero status even if nothing matched
228
shin
git add -u 

すべての変更を更新します

620
mshameers

git rm .には非常に注意してください。必要以上に削除される可能性があります。もちろん、回復することもできますが、そうする必要がない方が簡単です。

最も簡単なのは:

git rm modules/welcome/language/english/kaimonokago_lang.php \
       modules/welcome/language/french/kaimonokago_lang.php \
       modules/welcome/language/german/kaimonokago_lang.php \
       modules/welcome/language/norwegian/kaimonokago_lang.php

ファイルが存在しないため、シェルワイルドカードは使用できませんが、使用できます(少なくともBashでは):

git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php

または検討してください:

git status | sed -n '/^# *deleted:/s///p' | xargs git rm

これはgit statusの出力を取り、デフォルトでは何も出力しません(sed -n)が、# deleted:で始まる行では、#deleted:を取り除き、残っているものを出力します。 xargsは引数を集めてgit rmコマンドに提供します。これは、名前の類似性(または非類似性)に関係なく、任意の数のファイルに対して機能します。

91

ByScriptsの答えの別のバージョンは

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

これは、gitから削除されたファイルのみを削除します。

また、変更されたファイルのみを追加するためにも使用できます。

git add $(git ls-files --modified)

これらのコマンドは、Windowsのgitbashでも機能します。

50
Vijay C

行ったすべての変更を更新します。

git add -u

削除されたファイルは、ステージングされていない(通常は赤色)からステージングされた(緑色)に変わるはずです。次に、削除されたファイルの削除をコミットします。

git commit -m "note"
35
Aziz Alto

mshameersおよび/またはpb2qで述べたように、変更されたファイルのステージングを気にしない場合の最良の解決策はgit add -uを使用することです。

削除されたファイルを削除するだけで、変更されたファイルをステージングしたくない場合は、ls-files引数を--deletedオプションと共に使用する必要があると思います(正規表現やその他の複雑な引数/オプションを使用する必要はありません):

git ls-files --deleted | xargs git rm
12
ByScripts

はい、git rm <filename>はファイルの削除された状態をステージングします。ここで、<filename>はglobパターンです。

$ git rm modules/welcome/language/*/kaimonokago_lang.php
rm modules/welcome/language/english/kaimonokago_lang.php
rm modules/welcome/language/french/kaimonokago_lang.php
rm modules/welcome/language/german/kaimonokago_lang.php
rm modules/welcome/language/norwegian/kaimonokago_lang.php

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    modules/welcome/language/english/kaimonokago_lang.php
#       ...

その後、コミットできます。

git commit -aは、必要に応じてこれを一度に実行します。

git add -uを使用して、削除されたすべてのファイルを含むすべての変更をステージングし、コミットすることもできます。

8
Ben James

私が削除した多くのファイルがコミット用にステージングされていない場合、それらをすべて1つのショーでgit rmできます:

for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done

質問回答者が述べたように、git rmには注意してください。

7
Justin Mandzik

これを試して:

 git rm `git ls-files -d`
5
eludom

実行時にすべてのファイルを削除するシェルスクリプトを作成できます。

git status | grep deleted | awk '{print "git rm " $3;}' > ../remove.sh

作成されるスクリプトはremove.shであり、git rmコマンドの完全なリストが含まれています。

3
La-comadreja

使用できます

git commit -m "remove files" -a
git Push

ファイルを手動で削除した後。

3
onalbi

「git rm」を使用してすべてを削除する場合。これが私がすることです:

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

このクエリは、削除されたすべてのファイルのリストを表示し、それらをgitリポジトリから削除します。それが役に立てば幸い。

2
DevWL
git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf
2
Boush
git add -u .

git add --update .
2
euccas

ビルトインクリーン機能も役立ちます...

git clean -fd
1
Randall Borck

ゴーストファイルを削除してこのきれいなコマンドを見つけた後、この問題がレポジトリに表示されました!

git add -A

基本的にgit add -agit add -uを組み合わせたものと同じですが、大文字と小文字が区別されます。 this awesome link から取得しました(2016年6月現在、オリジナルはスパム/フィッシングページに変換されているため、このリンクはarchive.orgのバージョンを指します)

1

削除されたファイルを検出し、次のコミットの一部として削除をステージングする方法は次のとおりです。このスレッドのすべてのソリューションには、異なるメリットがあります。以下のこのソリューションでは、スペースが含まれるファイル名の問題を特に扱います。

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm '{}'

以下を実行する前に、gitの--dry-runオプションでこれをテストしてください:

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm --dry-run '{}'

説明:

git status --porcelain

これは、パス名にスペースが含まれている場合にのみ発生するD "/ path to the folder/path to file"のようなものを出力します

awk '/^.D .*$/ {print $0}'

「D」で始まる行のみに一致

sed 's/ D \(.*\)/\1/'

各文字列の先頭から「D」を削除します

tr -d '"'

引用符がある場合は削除します

xargs -I {} git rm '{}'

ファイル名変数を{}として定義し、スペースを含むファイル名をサポートすることを確認するために、単一引用符で囲まれたgit rmの下でファイル名を実行します。

0
N D