245

I have deleted some files and git status shows as below.

I have committed and pushed.

GitHub still shows the deleted files in the repository. How can I delete files in the GitHub repository?

# 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

If I use git rm, it gives the following.

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
4

16 に答える 16

662
git add -u 

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

于 2012-09-01T16:48:11.220 に答える
92

については十分に注意してください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:xargsgit rm

于 2011-05-14T20:22:37.517 に答える
54

ByScriptsの回答に対する別のバージョンは

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

これにより、削除されたファイルのみが git から削除されます。

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

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

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

于 2013-07-04T18:40:24.273 に答える
13

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

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

git ls-files --deleted | xargs git rm
于 2013-01-11T12:46:36.757 に答える
8

はい、glob パターンの可能性がgit rm <filename>あるファイルの削除済み状態をステージングします。<filename>

$ 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して、削除されたすべてのファイルを含むすべての変更をステージングしてからコミットすることもできます。

于 2011-05-14T20:06:43.620 に答える
7

コミットのためにステージングされていない、削除したファイルがたくさんある場合は、次のコマンドを使用git rmしてすべてを 1 つのショーにまとめることができます。

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

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

于 2012-07-08T08:15:31.850 に答える
5

これを試して:

 git rm `git ls-files -d`
于 2015-10-01T11:03:30.130 に答える
3

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

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

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

于 2014-06-26T01:32:56.343 に答える
3

使用できます

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

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

于 2014-02-25T22:17:27.653 に答える
2
git add -u .

git add --update .
于 2015-08-17T01:47:48.993 に答える
2
git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf
于 2012-11-12T02:12:25.940 に答える
2

ゴーストファイルを削除した後、リポジトリにゴーストファイルが表示されるという問題があり、このきちんとしたコマンドに出くわしました!

git add -A

git add -a基本的にはand を組み合わせたものと同じgit add -uですが、大文字と小文字が区別されます。この素晴らしいリンクから入手しました(このリンクは、2016 年 6 月の時点で元のページがスパム/フィッシング ページに変換されたため、現在は archive.org のバージョンを指しています)。

于 2013-08-28T15:10:17.490 に答える
2

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

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

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

于 2013-09-29T12:34:09.123 に答える
1

組み込みのクリーン機能も役立ちます...

git clean -fd
于 2013-04-09T18:51:48.467 に答える