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

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

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

如果你只是使用rm ,你需要使用git add <fileRemoved>git rm一步git rm

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

使用rm去除文件本身并不是一个问题,但是如果你想提交这个文件被删除,你将不得不做一个git rm ,所以你可以这样做。

另外,根据你的shell,在删除文件后做git rm ,你将不会得到tab-completion,所以你必须自己拼写出path,而如果你在文件仍然存在的时候运行git rm ,tab完成将会起作用像平常一样。

git rm会从索引和工作目录中删除这个文件(如果你使用了--cached只有索引),这样删除才会被下一次提交。

当使用git rm时,删除将会成为下一次提交的一部分。 所以如果你想推动你的变化,你应该使用git rm

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

git commit -a

从索引或从工作树和索引中删除文件。 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