在使用 reset 之前,请考虑使用 revert 以便您可以随时返回。
https://www.pixelstech.net/article/1549115148-git-reset-vs-git-revert
根据要求
来源:https ://www.pixelstech.net/article/1549115148-git-reset-vs-git-revert
git reset vs git revert
sonic0002 2019-02-02 08:26:39
在使用 git 等版本控制系统维护代码时,我们不可避免地需要回滚一些由于错误或临时代码还原而导致的错误提交。在这种情况下,新手开发人员会非常紧张,因为他们可能会迷失在不影响其他人的情况下应该如何回滚更改,但对于资深开发人员来说,这是他们的日常工作,他们可以向您展示不同的方式。在这篇文章中,我们将介绍开发人员经常使用的两个主要的。
它们有什么区别和对应的用例?我们将在下面详细讨论它们。git reset 假设我们有以下几个提交。
提交 A 和 B 是工作提交,但提交 C 和 D 是错误提交。现在我们要回滚到提交 B 并删除提交 C 和 D。目前 HEAD 指向提交 D 5lk4er,我们只需将 HEAD 指向提交 B a0fvf8 即可实现我们想要的。使用 git reset 命令很容易。
git reset --hard a0fvf8
执行上述命令后,HEAD 将指向提交 B。
但是现在remote origin还是有HEAD point to commit D,如果我们直接用git push推送修改,是不会更新remote repo的,需要加-f选项强制推送修改。
git push -f
这种方法的缺点是一旦重置完成,HEAD 之后的所有提交都将消失。万一有一天我们发现一些提交吃掉了好的提交并想要保留它们,那就太晚了。正因为如此,许多公司禁止使用这种方法来回滚更改。
git revert git revert的
用途是创建一个新的提交,它可以恢复以前的提交。HEAD 将指向新的还原提交。对于上面的 git reset 示例,我们需要做的只是恢复提交 D,然后恢复提交 C。
git revert 5lk4er
git revert 76sdeb
现在它创建了两个新的提交 D' 和 C',
在上面的例子中,我们只有两个提交要恢复,所以我们可以一个一个地恢复。但是如果有很多提交要恢复怎么办?我们确实可以恢复一个范围。
git revert OLDER_COMMIT^..NEWER_COMMIT
这种方法没有git reset的缺点,它将 HEAD 指向新创建的还原提交,并且可以直接将更改推送到远程而不使用-f选项。现在让我们看一个更难的例子。假设我们有三个提交,但错误的提交是第二个提交。
使用git reset回滚提交 B不是一个好主意,因为我们需要保留提交 C,因为它是一个好的提交。现在我们可以恢复提交 C 和 B,然后使用cherry-pick再次提交 C。
从上面的解释中,我们可以发现 git reset 和git revert最大的区别在于git reset会通过在期望的提交后删除所有更改来将分支的状态重置为先前的状态,而 git revert 将重置为先前的状态通过创建新的还原提交来状态并保留原始提交。建议在企业环境中使用 git revert 而不是 git reset 。参考:https://kknews.cc/news/4najez2.html