我使用rm
,Finder等从Git存储库中删除了一堆文件和目录。
我正在寻找一个Git命令,它会将这些记录记录到索引标记为删除,就好像我已经在它们上面调用了git rm
。
我理解git add -u
会做这件事,还有其他一些事情。我希望我的命令专门处理删除。
答案 0 :(得分:33)
文件名中没有空格:
$ git rm `git ls-files -d`
更强大:
$ git ls-files -z -d | xargs -0 --no-run-if-empty git rm
答案 1 :(得分:5)
看看Jonio C Hamano在git邮件列表的“Re: [PATCH 1/2] Documentation: 'git add -A' can remove files”帖子中所写的内容,即这个问题看起来像XY problem(你问的是问题的假设解决方案Y,而不是问题X本身)。问题的解决方案(如果它确实是“XY问题”情况)可能是:
git commit -a
,会自动获取删除内容,在工作目录中提交跟踪文件的当前状态
git add -A
,这会添加未被忽略的未跟踪文件并删除不再存在的文件,例如如果你想从工作目录的横向更新创建提交,例如解包快照或rsync结果。
然而,如果你问的是一个问题(而不是解决方案),那么你可以从其他答案中看到,有一些工具可以做到这一点。
答案 2 :(得分:4)
Charles Bailey的回答让我朝这个方向努力,但我仍然欢迎更短的事情。
$ git diff --name-only --diff-filter=D | xargs git rm
答案 3 :(得分:2)
在Git 2.0中,git add
的行为与git add --ignore-removal <pathspec>
类似,忽略了从工作树中删除的路径。
您可以使用git add --all <pathspec>
记录删除。
运行git status
以检查从工作树中删除的路径。
答案 4 :(得分:0)
此命令将为您提供所有已删除文件的列表,这些文件将转发给git rm。所以所有文件都将被删除。如果没有找到删除的文件,则不会发生任何事情:
git ls-files -z -d | xargs -0 --no-run-if-empty git rm