如何添加并提交使用"rm"而不是"git rm"删除的文件?

20

我使用rm、Finder等工具从Git仓库中删除了一堆文件和目录。

我正在寻找一个Git命令,将这些标记为需要移除,并记录到索引中,就像我调用了git rm一样。

我知道git add -u可以做到这一点,并且还有其他一些功能。但我希望我的命令只处理移除操作。


相关但不是完全重复的问题:从Git仓库中删除已经从磁盘中删除的多个文件。另一个问题已经说明了git rm可以暂存被删除的文件,只是在寻找一种通过单个调用git rm来暂存所有已删除文件的方法。 - user456814
5个回答

35

文件名中不包含空格:

$ git rm `git ls-files -d`

更加健壮:

$ git ls-files -z -d | xargs -0 --no-run-if-empty git rm

2
请注意,它需要从您的存储库的顶级目录运行。 - Greg Bacon

8
请看Jonio C Hamano在git邮件列表中发布的“Re: [PATCH 1/2] Documentation: 'git add -A' can remove files”帖子中写的内容,他认为这个问题看起来像XY问题(你询问了假设解决方案Y而不是问题X本身)。如果真的是“XY问题”情况,解决问题的方法可能是:
  • git commit -a,它会自动获取删除,在工作目录中跟踪文件的当前状态。

  • git add -A,它会添加未被忽略的未跟踪文件并删除不再存在的文件,例如,如果您想从工作目录的侧面更新(例如解压快照或rsync的结果)创建提交。

然而,如果你所问的是一个问题(而不是解决方案),那么从其他答案中可以看出已经有相应的工具可用。


这直接回答了问题:git commit -a - Jack Mason

4
查尔斯·贝利的回答引导我朝这个方向,但我仍然希望有更简短的内容。
$ git diff --name-only --diff-filter=D | xargs git rm

2
在Git 2.0中,git add的行为类似于git add --ignore-removal <pathspec>,它会忽略你从工作目录中删除的路径。
您可以使用git add --all <pathspec>来记录删除操作。
运行git status以检查您从工作树中删除的路径。

0

这个命令会给你一个所有已删除文件的列表,然后将其转发到 git rm 命令,以便删除所有文件。如果没有找到已删除文件,则不会执行任何操作:

git ls-files -z -d | xargs -0 --no-run-if-empty git rm


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接