【问题标题】:Git - rm equivalent for "add ."?Git - rm 等效于“添加。”?
【发布时间】:2011-02-09 18:11:29
【问题描述】:

如果您从命令行使用 Git,有没有办法一举删除已更改但未更新列表中所有要删除的文件?而不是使用通配符进行手动删除。

【问题讨论】:

  • 请注意,git commit -a 将在提交中删除所有已删除的跟踪文件。仅供参考。
  • git commit -a 只添加文件——这是大多数人,包括我自己一直在使用的。答案是git commit -A。它将同时展示要添加的物品和要删除的物品!请参阅下面 Sujoy 的回答。

标签: git git-add git-rm


【解决方案1】:

以下内容应暂存索引中的所有文件,无论是否已删除:

git add -A

【讨论】:

  • 这是我相信每个人都在寻找的快速答案。
【解决方案2】:

嗯,已更改但未更新下列出的文件已经在索引中。您可以使用 git checkout .
放弃他们的更改 要删除新的但尚未添加到索引中的文件,您可以使用git clean。
但是要删除已修改并在索引中的文件......好吧,没有简单的解决方案,您可能必须使用git rm 和git ls-files 的组合。

编辑:
git ls-files -m 应该列出您要查找的文件。将它与git rm 结合起来就完成了:

git-ls files -m | xargs git rm // NOT TESTED

编辑:
我可能误解了你问题的一部分。我的解决方案将删除已更改但未更新下列出的所有文件。如果您想删除列为 deleted 的文件,您必须使用 git diff,正如 Charles Bailey 在他的回答中显示的那样。

【讨论】:

  • 谢谢。那么你会如何结合呢? git rm
  • git ls-files -m 列出所有修改的文件,而不仅仅是删除的文件。我不认为你想删除所有修改过的文件,只是那些从工作树中删除的文件。
  • @Charles:是的,你是对的——这就是我理解这个问题的方式。但你可能是对的,这不是 OP 想要的……我的 +1 是因为我选择了这个
【解决方案3】:

在状态的“已更改但未更新”部分中显示为已删除的文件将从工作树中删除,但不会从索引中删除。要在索引中进行删除(即从索引中删除文件),您可以执行以下操作:

git diff -z --name-only --diff-filter=D | git update-index --remove -z --stdin

--diff-filter=D 仅显示已删除文件的索引差异,--name-only 仅打印它们的名称,-z 使用 NUL 分隔文件名,这样您就不必担心带有嵌入换行符的文件名。 update-index 然后从索引中删除给定的文件。

如果您有支持-0 的xargs 版本,那么您可以稍微简单一些:

git diff -z --name-only --diff-filter=D | xargs -0 git rm

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 2021-03-28
    • 2021-05-28
    • 2010-09-11
    • 2021-10-30
    • 2012-10-05
    • 2020-11-19
    • 2010-12-23
    相关资源
    最近更新 更多