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


171

在SVN上,直接从文件系统中删除某些内容(而不是使用svn)造成了很多麻烦。

使用时,我还没有发现这是一个问题git,但是我注意到git有它自己的rm实现(git rm)。

rm和之间有什么区别git rm

Answers:


253

如果您只是使用rm,则需要跟进git add <fileRemoved>git rm一步就能做到。

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


好答案。git reset --hard因为我知道我没有任何未提交的更改,所以我能够使用master进行检出,以脱离独立的头状态。如果您尚未提交更改,则可能需要执行git stash,但我对git相对较新,因此我不知道确切的命令。如果您在2014年或之后来这里,我希望这个答案对您有用。
Eric Hepperle-CodeSlayer2010'2014/

@Andy-如果我使用rm(而不是git rm)并使用它删除了许多文件,现在又不想git跟踪它们。有办法还原更改吗?我想把git我的rm脚踩掉,因为我一开始就没有使用git rm
Chetan Arvind Patil

如果在在线文档中清楚地阐明了这一点,那就太好了(它可能在那里,但是显然并不明显,或者不会问这个问题)。知道用户使用OS rm路由并没有做错任何事情,这将是非常高兴的。并且有使用操作系统的理由。例如,如果您需要在提交更改之前删除文件以测试某些东西是否有效,则OS路由比使用git rm安全一些,因为在git情况下,您必须取消操作的执行,而在OS选项中,您只需来获取(我相信)。
bob

12

删除文件rm本身并不是问题,但是如果您要提交删除文件的信息,则还是必须这样做git rm,所以您最好立即进行删除。

另外,根据外壳程序的不同,git rm在删除文件后也不会完成制表符的填充,因此您必须自己拼出路径,而如果git rm文件仍然存在,则制表符补全将正常进行。


7

git rm将从索引和工作目录中删除文件(如果使用则仅--cached删除索引),以便为下一次提交暂存该删除操作。


4

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

git commit -a


3

从索引或工作树和索引中删除文件。git rm不会仅从您的工作目录中删除文件。

使用以下方法删除文件rm -f,然后使用以下方法将其从索引中删除:git rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

但是,您只需一次即可完成所有操作 git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html

2

使用git rm时,删除将成为您下次提交的一部分。因此,如果您要进行更改,则应使用git rm


2

除了Andy的答案外,还有其他实用程序git rm

  1. 安全性:在做git rm代替rm,Git会阻止拆除,如果有是有差异HEAD的文件版本和升级索引或工作树版本。此块是一种安全机制,可防止删除正在进行的更改。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.