在SVN上,直接从文件系统中删除某些内容(而不是使用svn)会产生一些令人头疼的问题。到目前为止,使用git,我还没有发现这是一个问题,但我注意到git有它自己的rm实现。
有区别吗?我做错了吗?
答案 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
还有其他实用程序:
安全性:执行git rm
而不是rm
时,如果某个版本的HEAD
版本之间存在差异,Git将阻止删除文件和暂存索引或工作树版本。此阻止是一种安全机制,用于防止删除正在进行的更改。
保护:git rm --dry-run
。此选项是一种安全措施,它将执行git rm
命令,但实际上不会删除文件。相反,它将输出将要删除的文件。
答案 6 :(得分:2)
使用git rm时,删除将是您下一次提交的一部分。因此,如果你想推动改变,你应该使用git rm