我删除了一些文件,git状态如下图所示。

我已经承诺并努力了。

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

当前回答

当我有很多文件,我已经删除,是unstaging提交,你可以git rm他们都在一个显示:

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

正如回答问题的人提到的,要小心git rm。

其他回答

ByScripts的另一个版本的答案是

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

这只会从git中删除已删除的文件。

它还可以用于添加仅修改的文件。

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

这些命令也适用于windows的gitbash。

更新您所做的所有更改:

git add -u

删除的文件应该从未分级(通常是红色)变为分级(绿色)。 然后提交删除已删除的文件:

git commit -m "note"

是的,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执行所有的更改,包括所有被删除的文件,然后提交。

试试这个:

 git rm `git ls-files -d`

对git要非常谨慎。可能会比你想要的多。当然,你可以恢复,但不这样做会更简单。

最简单的是:

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

你不能使用shell通配符,因为文件不存在,但你可以使用(至少在Bash中):

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

或者考虑:

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

它接受git状态的输出,默认情况下不打印任何内容(sed -n),但在以# deleted:开头的行中,它会删除#和deleted:,并打印剩余的内容;Xargs收集参数并将它们提供给git rm命令。这适用于任何数量的文件,而不管名称的相似性(或不相似性)。