如何使用“rm”而不是“git rm”添加和提交删除?

时间:2009-12-06 21:23:12

标签: git version-control

我使用rm,Finder等从Git存储库中删除了一堆文件和目录。

我正在寻找一个Git命令,它会将这些记录记录到索引标记为删除,就好像我已经在它们上面调用了git rm

我理解git add -u会做这件事,还有其他一些事情。我希望我的命令专门处理删除。

5 个答案:

答案 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