在SVN上,直接从文件系统中删除一些东西(而不是使用svn)会带来一大堆麻烦.我在使用git时没有发现这是一个问题,但我注意到git有自己的rm实现(git rm)。rm和git rm之间的区别是什么?
git
rm
git rm
xwmevbvl1#
如果您只是使用rm,则需要使用git add <fileRemoved>进行后续操作。git rm只需一步即可完成此操作。您也可以使用git rm --cached,它将从索引中删除文件(暂存它以便在下次提交时删除),但将副本保留在本地文件系统中。
git add <fileRemoved>
git rm --cached
x8goxv8g2#
使用rm删除文件本身不是问题,但是如果您希望提交文件已被删除,则无论如何都必须执行git rm,因此您最好立即执行此操作。另外,根据你的shell,在删除文件后执行git rm,你将不会得到制表符完成,所以你必须自己拼写出路径,而如果你在文件仍然存在时执行git rm,制表符完成将正常工作。
gdrx4gfi3#
git rm将从索引和工作目录中删除文件(如果使用--cached,则仅从索引中删除),以便为下次提交暂存删除操作。
--cached
qhhrdooz4#
除了Andy的回答,git rm还有其他实用程序:1.安全性:当执行git rm而不是rm时,如果文件的HEAD版本与暂存索引或工作树版本之间存在差异,Git将阻止删除操作。此阻止是一种安全机制,用于防止删除正在进行的更改。1.保障措施:git rm --dry-run。此选项是一种保护措施,它将执行git rm命令,但不会实际删除文件。相反,它将输出它将删除的文件。
HEAD
git rm --dry-run
z0qdvdin5#
但是,如果你最终使用rm而不是git rm,你可以跳过git add,直接使用以下命令提交修改:git commit -a
git commit -a
kuuvgm7e6#
从索引或工作树和索引中删除文件。git rm不会只从工作目录中删除文件。下面介绍了如何使用rm -f删除文件,然后使用git rm将其从索引中移除
rm -f
$ 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
ozxc1zmp7#
当使用git rm时,删除操作将是你下次提交的一部分,所以如果你想推送修改,你应该使用git rm
92dk7w1h8#
我想我终于明白了如果对文件file_a.txt进行更改然后
file_a.txt
git add file_a.txt rm file_a.txt git commit -m 'Commit message'
虽然文件从工作目录中删除(即从磁盘中删除,或移动到垃圾箱中),但不会从临时区域中删除,因此临时区域中的更改(即索引)将被提交如果你不这样做
git add file_a.txt git rm file_a.txt git commit -m 'Commit message'
该文件将从磁盘和临时区域中删除,因此不会提交更改如果在你最后一次提交之后,你做了
rm file_a.txt git commit -m 'Commit message'
或
git rm file_a.txt git commit -m 'Commit message'
这应该没有什么区别,因为您没有向临时区域或索引添加任何更改,因此工作目录中只有该文件的一个副本,因此这两个命令的影响相同所以总的来说rm只会从磁盘中删除,而不会从暂存区中删除git rm会同时从磁盘和暂存区中删除(一个特殊的git区域,常规的windows或linux命令无法访问)
kkbh8khc9#
当用户使用不区分大小写的系统如Windows或MacOS时,git rm在某些情况下比rm更安全。假设你的git仓库在不区分大小写的系统上有一个名为foo.js的提交文件,你在运行git rm Foo.js时会遇到一个错误,但在运行rm Foo.js时不会。
foo.js
git rm Foo.js
rm Foo.js
9条答案
按热度按时间xwmevbvl1#
如果您只是使用
rm
,则需要使用git add <fileRemoved>
进行后续操作。git rm
只需一步即可完成此操作。您也可以使用
git rm --cached
,它将从索引中删除文件(暂存它以便在下次提交时删除),但将副本保留在本地文件系统中。x8goxv8g2#
使用
rm
删除文件本身不是问题,但是如果您希望提交文件已被删除,则无论如何都必须执行git rm
,因此您最好立即执行此操作。另外,根据你的shell,在删除文件后执行
git rm
,你将不会得到制表符完成,所以你必须自己拼写出路径,而如果你在文件仍然存在时执行git rm
,制表符完成将正常工作。gdrx4gfi3#
git rm
将从索引和工作目录中删除文件(如果使用--cached
,则仅从索引中删除),以便为下次提交暂存删除操作。qhhrdooz4#
除了Andy的回答,
git rm
还有其他实用程序:1.安全性:当执行
git rm
而不是rm
时,如果文件的HEAD
版本与暂存索引或工作树版本之间存在差异,Git将阻止删除操作。此阻止是一种安全机制,用于防止删除正在进行的更改。1.保障措施:
git rm --dry-run
。此选项是一种保护措施,它将执行git rm
命令,但不会实际删除文件。相反,它将输出它将删除的文件。z0qdvdin5#
但是,如果你最终使用rm而不是git rm,你可以跳过git add,直接使用以下命令提交修改:
git commit -a
kuuvgm7e6#
从索引或工作树和索引中删除文件。git rm不会只从工作目录中删除文件。
下面介绍了如何使用
rm -f
删除文件,然后使用git rm
将其从索引中移除不过,您可以使用
git rm
一次性完成所有这些操作ozxc1zmp7#
当使用git rm时,删除操作将是你下次提交的一部分,所以如果你想推送修改,你应该使用git rm
92dk7w1h8#
我想我终于明白了
如果对文件
file_a.txt
进行更改然后
虽然文件从工作目录中删除(即从磁盘中删除,或移动到垃圾箱中),但不会从临时区域中删除,因此临时区域中的更改(即索引)将被提交
如果你不这样做
该文件将从磁盘和临时区域中删除,因此不会提交更改
如果在你最后一次提交之后,你做了
或
这应该没有什么区别,因为您没有向临时区域或索引添加任何更改,因此工作目录中只有该文件的一个副本,因此这两个命令的影响相同
所以总的来说
rm
只会从磁盘中删除,而不会从暂存区中删除git rm
会同时从磁盘和暂存区中删除(一个特殊的git区域,常规的windows或linux命令无法访问)kkbh8khc9#
当用户使用不区分大小写的系统如Windows或MacOS时,
git rm
在某些情况下比rm
更安全。假设你的git仓库在不区分大小写的系统上有一个名为
foo.js
的提交文件,你在运行git rm Foo.js
时会遇到一个错误,但在运行rm Foo.js
时不会。