在使用 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 重置
假设我们有以下几个提交。
提交 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 还原
git revert 的用途是创建一个新的提交来恢复之前的提交。 HEAD 将指向新的还原提交。
对于上面的 git reset 示例,我们需要做的只是恢复提交 D,然后恢复提交 C。
git revert 5lk4er
git revert 76sdeb
现在它创建了两个新的提交 D' 和 C',
在上面的例子中,我们只有两个提交要恢复,所以我们可以一个一个地恢复。但是如果有很多提交要恢复怎么办?我们确实可以还原一个范围。
git revert OLDER_COMMIT^..NEWER_COMMIT
这种方法没有git reset的缺点,它会将HEAD指向新创建的reverting commit,并且可以直接将更改推送到远程而不使用-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