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

时间:2011-09-15 16:43:03

标签: git

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

有区别吗?我做错了吗?

7 个答案:

答案 0 :(得分:200)

如果您只使用rm,则需要使用git add <fileRemoved>进行跟进。 git rm只需一步即可完成此操作。

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

答案 1 :(得分:9)

使用rm删除文件本身并不是问题,但是如果您想提交文件已被删除,那么无论如何都必须执行git rm,所以您不妨就这样直接蝙蝠。

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

答案 2 :(得分:6)

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

答案 3 :(得分:4)

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

git commit -a

答案 4 :(得分: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

答案 5 :(得分:3)

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

  1. 安全性:执行git rm而不是rm时,如果某个版本的HEAD版本之间存在差异,Git将阻止删除文件和暂存索引或工作树版本。此阻止是一种安全机制,用于防止删除正在进行的更改。

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

答案 6 :(得分:2)

使用git rm时,删除将是您下一次提交的一部分。因此,如果你想推动改变,你应该使用git rm