Pac*_*ier 149 git git-reset git-index git-rm
git rm
将从暂存区域中删除条目.这与git reset HEAD
"unstages"文件有点不同.通过"unstage"我的意思是它将暂存区域恢复到我们开始修改之前的状态.git rm
另一方面,只需将文件完全从舞台上踢出,这样它就不会包含在下一个提交快照中,从而有效地删除它.默认情况下,a
git rm file
将完全从暂存区域中删除文件,也将从磁盘>(工作目录)中删除.要将文件保留在工作目录中,您可以使用git rm --cached
.
但究竟是什么区别git rm --cached asd
和git reset head -- asd
?
man*_*lds 210
例如,文件有三个位置 - 树,索引和工作副本.当您只是将文件添加到文件夹时,您将其添加到工作副本.
当您执行类似的操作时git add file
,将其添加到索引中.当你提交它时,你也将它添加到树中.
它可能会帮助您了解git reset中三个更常见的标志:
git reset [ -
<mode>
] [<commit>
]此表单将当前分支头重置为
<commit>
并可能更新索引(将其重置为树<commit>
)和工作树,具体取决于<mode>
,必须是以下之一:--
soft根本不触摸索引文件或工作树(但是将头重置为
<commit>
,就像所有模式一样).这将保留所有已更改的文件"要提交的更改",因为git status会将其设置为.--mixed
重置索引但不重置工作树(即保留更改的文件但未标记为提交)并报告尚未更新的内容.这是默认操作.
- 硬
重置索引和工作树.之后对工作树中跟踪文件的任何更改
<commit>
都将被丢弃.
现在,当你做类似的事情git reset HEAD
- 你实际做的是什么git reset HEAD --mixed
,它会将索引"重置"到你开始添加文件/添加修改到索引之前的状态(通过git add
)在这种情况下,工作副本和index(或staging)处于同步状态,但您在重置后使HEAD和索引同步.
git rm
另一方面,从工作目录和索引中删除文件,当您提交时,该文件也将从树中删除.git rm --cached
但是,仅从索引中删除文件并将其保留在工作副本中.这与完全相反.git add file
在这种情况下,你使索引与HEAD和工作不同,其中HEAD具有先前提交的文件版本,工作副本具有las修改,如果有任何或来自HEAD的内容该文件,您从索引中删除了该文件.提交现在将同步索引和树,文件将被删除.
Gre*_*ill 77
也许一个例子会有所帮助:
git rm --cached asd
git commit -m "the file asd is gone from the repository"
Run Code Online (Sandbox Code Playgroud)
与
git reset HEAD -- asd
git commit -m "the file asd remains in the repository"
Run Code Online (Sandbox Code Playgroud)
请注意,如果您没有更改任何其他内容,则第二次提交实际上不会执行任何操作.
yur*_*iks 38
git rm --cached file
将从舞台中删除该文件.也就是说,当您提交文件时将被删除.git reset HEAD -- file
将简单地将暂存区域中的文件重置为HEAD提交中的状态,即撤消自上次提交后对其所做的任何更改.如果该更改恰好是新添加文件,那么它们将是等效的.
归档时间: |
|
查看次数: |
176422 次 |
最近记录: |