我刚刚做了一个舞台:
git add .
Run Code Online (Sandbox Code Playgroud)
当我想重置时,我使用了:
git rm .
Run Code Online (Sandbox Code Playgroud)
突然所有文件都被删除了!我认为这应该只是删除了树工作,它的行为就像我所做的那样:
rm -rf ./*
Run Code Online (Sandbox Code Playgroud)
为什么它删除了所有文件?我应该使用什么命令呢?
当您从索引和工作树中删除文件时,git 会注意到您在当前提交中拥有的文件现已消失,因此git status将显示这些文件已被删除。
不过,无需惊慌。这只是 Git 告诉您与之前的提交相比,它发现这些文件已经消失的方式。这些文件仍然存在于存储库中。事实上,如果您现在暂存所有删除并提交,您将只有一个没有文件的新提交,但您当前的提交仍将与存储库中的所有文件一起存在。您可以随时查看它,它会将这些文件恢复到工作目录中。
有关如何从中恢复文件的信息git rm可在此答案中找到。
注意:请小心:
Run Code Online (Sandbox Code Playgroud)git reset --hard这在这种情况下有效(根据其他答案),但要小心一点 - 了解虽然它将所有文件恢复到最后(当前)提交,但这意味着您将丢失索引和索引中的所有更改工作目录。在这种情况下,您确实想要恢复所有文件(因为已
git rm .删除所有文件),所以这不是问题。您可以将单个文件恢复到上次提交状态
Run Code Online (Sandbox Code Playgroud)git reset --hard [filename]
关于如何从暂存区域中删除文件 - 我更喜欢使用 Git Extensions,这是一种流行的开源 Git GUI 工具。当您点击“提交”按钮时,它会打开一个提交窗口,其中显示所有已暂存和未暂存的文件以及任何更改,让您单击其中任何一个文件并查看更改的差异,并且有一些按钮可以在不同版本之间移动它们。工作目录和索引。
但如果您想要命令行选项,可以使用以下命令:
Run Code Online (Sandbox Code Playgroud)git reset
将从索引中删除所有文件/更改(注意:没有句点!!)。另外,您还可以使用:
Run Code Online (Sandbox Code Playgroud)git reset [filename]
仅取消暂存 [文件名](或文件名模式,如 *.txt)。
这与使用 , 相同git reset --mixed,并导致 git 将所有文件(或只是 [文件名])设置回当前提交时的状态。该--mixed选项仅重置索引,而不重置工作目录,因此它不会删除文件中的任何更改,只会使文件/更改取消暂存。
如果您使用git reset --soft它不会执行任何操作 ---soft不会重置索引或工作目录,并且由于您没有指定不同的分支或提交,因此它将使用现有索引将所有文件重置为当前提交,并且工作目录 - 这是您已经拥有的目录!
如果您使用git reset --hard,它将清除索引和工作目录,并将文件恢复到当前提交的原始状态 - 它们将被取消暂存,没有任何更改 - 这是解决删除问题的一种解决方案。
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |