如何添加和提交使用“rm”而不是“git rm”进行的删除?
Posted
技术标签:
【中文标题】如何添加和提交使用“rm”而不是“git rm”进行的删除?【英文标题】:How to add and commit removals made with "rm" instead of "git rm"? 【发布时间】:2010-12-23 19:42:23 【问题描述】:我使用 rm
、Finder 等从 Git 存储库中删除了一堆文件和目录。
我正在寻找一个 Git 命令,它将这些记录到标记为删除的索引中,就好像我在它们上调用了git rm
。
我知道git add -u
会这样做,以及其他一些事情。我希望我的命令专门处理删除。
【问题讨论】:
相关但不完全重复:Removing multiple files from a Git repo that have already been deleted from disk。另一个问题已经表明git rm
可以暂存已删除的文件,它只是在寻找一种方法来暂存所有文件,只需一次调用git rm
。
Removing multiple files from a Git repo that have already been deleted from disk的可能重复
【参考方案1】:
文件名中没有空格:
$ git rm `git ls-files -d`
更健壮:
$ git ls-files -z -d | xargs -0 --no-run-if-empty git rm
【讨论】:
请注意,它需要从您的 repo 的***目录运行。【参考方案2】:在 Git 2.0 中,git add
的行为类似于 git add --ignore-removal <pathspec>
,它会忽略您从工作树中删除的路径。
您可以使用git add --all <pathspec>
记录删除情况。
运行 git status
以检查您从工作树中删除的路径。
【讨论】:
【参考方案3】:此命令将为您提供所有已删除文件的列表,这些文件将被转发到 git rm。所以所有文件都将被删除。如果没有找到已删除的文件,则不会发生任何事情:
git ls-files -z -d | xargs -0 --no-run-if-empty git rm
【讨论】:
【参考方案4】:看看 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 的快照或结果。
尽管如此,如果您问的是问题(而不是解决方案),那么正如您从其他答案中看到的那样,有工具可以解决。
【讨论】:
这直接回答了这个问题:git commit -a【参考方案5】:Charles Bailey 的回答促使我这样做,但我仍然欢迎更简短的内容。
$ git diff --name-only --diff-filter=D | xargs git rm
【讨论】:
以上是关于如何添加和提交使用“rm”而不是“git rm”进行的删除?的主要内容,如果未能解决你的问题,请参考以下文章
GitGit 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )