我删除了一些文件,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
对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命令。这适用于任何数量的文件,而不管名称的相似性(或不相似性)。
是的,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执行所有的更改,包括所有被删除的文件,然后提交。