我删除了一些文件和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
Run Code Online (Sandbox Code Playgroud)
如果我使用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
Run Code Online (Sandbox Code Playgroud)
小智 627
git add -u
Run Code Online (Sandbox Code Playgroud)
更新所有更改
Jon*_*ler 91
要非常谨慎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
Run Code Online (Sandbox Code Playgroud)
您不能使用shell通配符,因为文件不存在,但您可以使用(至少在Bash中):
git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php
Run Code Online (Sandbox Code Playgroud)
或者考虑:
git status | sed -n '/^# *deleted:/s///p' | xargs git rm
Run Code Online (Sandbox Code Playgroud)
这取得了输出git status
,默认情况下不打印任何东西(sed -n
),但是在开始的行上# deleted:
,它摆脱#
了deleted:
和打印剩下的东西; xargs
收集参数并将它们提供给git rm
命令.无论名称中的相似性(或不相似性)如何,这都适用于任意数量的文件.
Vij*_*y C 50
ByScripts答案的另一个版本是
git rm $(git ls-files --deleted)
Run Code Online (Sandbox Code Playgroud)
这只会从git中删除已删除的文件.
它也可以用于添加仅修改过的文件.
git add $(git ls-files --modified)
Run Code Online (Sandbox Code Playgroud)
这些命令也适用于Windows的gitbash.
Azi*_*lto 35
更新您所做的所有更改:
git add -u
Run Code Online (Sandbox Code Playgroud)
删除的文件应从未分阶段(通常为红色)更改为分阶段(绿色).然后提交删除已删除的文件:
git commit -m "note"
Run Code Online (Sandbox Code Playgroud)
ByS*_*pts 12
如果你不关心分期修改文件的最佳解决方案是使用git add -u
如说mshameers和/或pb2q.
如果你只是想删除已删除的文件,但不要暂存任何修改过的文件,我认为你应该使用ls-files
带有该--deleted
选项的参数(不需要使用正则表达式或其他复杂的args /选项):
git ls-files --deleted | xargs git rm
Run Code Online (Sandbox Code Playgroud)
是的,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
# ...
Run Code Online (Sandbox Code Playgroud)
然后,你可以提交.
git commit -a
如果你愿意的话,我会一气呵成.
您还可以使用git add -u
暂存所有更改,包括所有已删除的文件,然后提交.
小智 7
当我有很多我已经删除但未提交的文件时,你可以git rm
在一个节目中使用:
for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done
Run Code Online (Sandbox Code Playgroud)
正如问题回答者提到的那样,要小心git rm
.