'git reset --hard HEAD〜1和'git reset --soft HEAD〜1之间有什么区别?

问题描述 投票:58回答:4

我试图撤消我在git中的提交。使用git reset --hard HEAD~1有危险吗?

git reset的不同选项之间有什么区别?

git undo git-reset
4个回答
123
投票

git reset确实知道五个“模式”:软,混合,硬,合并和保留。我将从头三个开始,因为这是您通常会遇到的模式。之后,您会发现一点好处,请继续关注。

soft

[使用git reset --soft HEAD~1时,您将从当前分支中删除最后一个提交,但是文件更改将保留在working tree中。更改还将保留在索引上,因此,在按git commit之后将创建与之前“删除”的提交完全相同的更改的提交。

混合

这是默认模式,与软模式非常相似。当使用git reset HEAD~1“删除”提交时,您仍将所做的更改保留在工作树中,但不保留在索引中。因此,如果您要“重做”提交,则必须在提交之前添加更改(git add)。

使用git reset --hard HEAD~1时,除了上次提交中引入的更改之外,您还将丢失所有未提交的更改。所做的更改不会保留在您的工作树中,因此执行git status命令将告诉您存储库中没有任何更改。

仔细阅读这个。如果您不小心删除了git从未跟踪过的未提交的更改(说:已提交或至少已添加到索引中),则无法使用git找回它们。

奖励

保持

git reset --keep HEAD~1是有趣而有用的。它仅重置current HEAD和给定提交之间的文件。如果这些文件中的任何一个有未提交的更改,它将中止重置。它基本上是hard的安全版本。

[这种模式在您进行了许多更改并且想要切换到另一个分支而又不会丢失这些更改时特别有用,例如,当您开始在错误的分支上工作时。


您可以在git reset documentation中了解更多信息。

注意

当执行git reset删除提交时,提交实际上并没有丢失,只是没有引用指向该提交或其任何子级。您仍然可以通过找到SHA-1密钥(例如,使用诸如git reset的命令)来恢复用git reflog“删除”的提交。

这是有用的文章,以图形方式显示了reset命令的说明。

https://git-scm.com/docs/git-reset

Reset --hard可能非常危险,因为它会在不检查的情况下覆盖您的工作副本,因此,如果您根本没有提交文件,则文件将消失。

关于源代码树,我没有办法撤消提交。无论如何,它很可能会在掩膜下使用reset

Git重置具有5种主要模式:软,混合,合并,硬,保持

。它们之间的区别是更改或不更改head,stage(索引),工作目录

Git reset --hard将更改头,索引和工作目录。Git reset --soft只会改变头。不变索引,工作目录。

因此,如果您想撤消提交,--soft应该足够好。但是之后,您仍然可以从索引和工作目录中的错误提交中进行更改。您可以修改文件,修复文件,将它们添加到索引并再次提交。

有了--hard,您就可以在项目中获得完整的成绩。好像上一次提交没有任何更改。如果您确定这是您想要的,请继续前进。但是一旦执行此操作,您将完全丢失上一次提交。 (注意:仍有一些方法可以恢复丢失的提交)。

这是使用git reset --hard

git reset --soft:
]之间的主要区别
--soft

完全不触摸索引文件或工作树(但将头重置为,就像所有模式一样)。这将保留所有更改的文件“要提交的更改”,就像git status一样。

--hard

重置索引和工作树。由于对工作树中跟踪文件的任何更改,都将被丢弃。


5
投票

这是有用的文章,以图形方式显示了reset命令的说明。


4
投票

Git重置具有5种主要模式:软,混合,合并,硬,保持


0
投票

这是使用git reset --hard

© www.soinside.com 2019 - 2024. All rights reserved.