【发布时间】:2011-09-15 16:43:02
【问题描述】:
在 SVN 上,直接从文件系统中删除某些内容(而不是使用 svn)会让人头疼。
我在使用git 时没有发现这是一个问题,但我注意到 git 有它自己的 rm 实现 (git rm)。
rm 和 git rm 有什么区别?
【问题讨论】:
标签: git
在 SVN 上,直接从文件系统中删除某些内容(而不是使用 svn)会让人头疼。
我在使用git 时没有发现这是一个问题,但我注意到 git 有它自己的 rm 实现 (git rm)。
rm 和 git rm 有什么区别?
【问题讨论】:
标签: git
如果您只使用rm,则需要使用git add <fileRemoved> 跟进。 git rm 一步完成。
您也可以使用 git rm --cached 从索引中删除文件(暂存它以在下次提交时删除),但将您的副本保留在本地文件系统中。
【讨论】:
git reset --hard,然后对 master 进行检查以摆脱分离的头部状态,因为我知道我没有任何未提交的更改。如果你还没有提交你的更改,你可能想要做一个 git stash,但我对 git 比较陌生,所以我不知道确切的命令。如果您在 2014 年或之后来到这里,希望这个答案对您有用。
rm(而不是git rm)并使用它删除了许多文件,现在不希望git 跟踪这些文件。有没有办法恢复更改?我希望git 将我的rm 删除,因为我一开始没有使用git rm。
使用rm 删除文件本身不是问题,但是如果您想提交文件已被删除,则无论如何您都必须执行git rm,所以您最好这样做马上行动。
另外,根据你的shell,在删除文件后执行git rm,你不会得到tab-completion,所以你必须自己拼出路径,而如果你git rm,而文件仍然存在, tab 补全将正常工作。
【讨论】:
git rm 将从索引和工作目录中删除文件(如果您使用了--cached,则只有索引),以便为下一次提交分阶段删除。
【讨论】:
除了安迪的回答之外,git rm 还有其他实用程序:
安全:当使用git rm 而不是rm 时,如果文件的HEAD 版本与暂存索引或工作树版本。此阻止是一种安全机制,可防止删除正在进行的更改。
保护:git rm --dry-run。此选项是一种安全措施,将执行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
【讨论】:
使用 git rm 时,删除将是您下一次提交的一部分。所以如果你想推动改变,你应该使用 git rm
【讨论】: