为什么使用'git rm'删除文件而不是'rm'?

cjm*_*671 146 git

在SVN上,直接从文件系统中删除某些东西(而不是使用svn)会产生一些令人头疼的问题.到目前为止,使用git,我没有发现这是一个问题,但我注意到git有它自己的rm实现.

有区别吗?难道我做错了什么?

And*_*ndy 224

如果你只是使用rm,你需要跟进它git add <fileRemoved>. git rm这是一步到位.

您还可以使用git rm --cached哪个将从索引中删除该文件(在下次提交时将其暂存以进行删除),但将您的副本保留在本地文件系统中.

  • 好答案。我能够使用 `git reset --hard` 然后检查 master 以摆脱分离的头部状态,因为我知道我没有任何未提交的更改。如果你还没有提交你的更改,你可能想要做一个 git stash,但我对 git 比较陌生,所以我不知道确切的命令。如果您是在 2014 年或之后来到这里的,我希望这个答案对您有用。 (2认同)

ham*_*mar 10

删除文件rm本身并不是问题,但是如果你想提交文件被删除,那么你git rm无论如何都要做,所以你也可以这样做.

此外,根据您的shell,git rm删除文件后执行操作,您将无法完成制表符,因此您必须自己拼出路径,而如果您git rm在文件仍然存在时,制表符完成将正常工作.


man*_*lds 8

git rm将从索引和工作目录中删除该文件(如果您使用的话只有索引--cached),以便为下一次提交暂存删除.


Joe*_*Joe 6

除了安迪的回答之外,还有以下附加实用程序git rm

  1. 安全性:当使用git rm代替 时rm,如果HEAD文件版本与暂存索引或工作树版本之间存在差异,Git 将阻止删除。此块是一种安全机制,可防止删除正在进行的更改。

  2. 保护git rm --dry-run。此选项是一种安全措施,将执行git rm命令但不会实际删除文件。相反,它将输出它会删除哪些文件。


Str*_*ler 5

但是,如果您最终使用 rm 而不是 git rm。您可以跳过 git add 并使用以下命令直接提交更改:

git commit -a