首页 > 编程知识 正文

git取消commit,svn revert 命令

时间:2023-05-05 13:55:06 阅读:152961 作者:51

在版本的迭代开发过程中,我想很多人都错提出过(至少良徐有过几次这样的体验) 在这种情况下,新人程序员可能会被老虎驱使,紧张得不知所措。 资深程序员会莞尔一笑,摸摸闪闪发光的脑袋,静静地放回版本。

版本回滚经常使用以下两个命令:

获取重置获取两个命令的区别是什么? 请不要着急。 稍后详细介绍。

git reset假设我们的系统现在提交如下。

其中a和b是正常提交,c和d是错误提交。 现在我们想把c和d放回去。 此时,头指针指向d提交(5lk4er )。 我们只需将头指针移动到b提交(a0fvf8)即可达到目的。

如果有具备git基础的朋友,一定会想到git reset指令吧。 完整的命令如下。

git reset--执行harda 0f VF 8命令时,头指针将移动到b提交下方,如下图所示。

此时,远程仓库的头指针没有变化,还在d提交中。 因此,如果直接使用git push命令,则无法将更改推送至远程仓库。 此时,只能使用-f选项强制将提交推送到远程仓库。

gitpush-f用这种方式回滚代码的弊端很明显,那就是将头指针向后移动,然后丢失后续的提交信息。 将来,突然之间,不管c和d是多么棒的想法,它们早就消失在历史的长河中了。

此外,一些公司(如良徐的公司)明确禁止使用git reset命令回滚代码。 理由与上述相同。 所以,您需要找到可以回滚代码或保存错误提交的命令。 此时,git revert命令很有用。

git revert git revert的作用是通过反向创建新版本。 此版本的内容与要回退的目标版本相同,但头指针指向的是新生成的版本,而不是目标版本。

要使用git revert命令实现以上示例,请首先revert D,然后revert C (如果有多个提交需要回滚,则必须从新旧版本中revert ) :

gitrevert5lk4er

gitrevert76sdeb

此时将生成两个新的提交: d '和c ',如下图所示。

这里只需要两个提交。 可以一个一个地回滚。 但是,如果有几十个呢? 一个个的回滚肯定是低效的,容易出错。 可以通过以下方式执行批量回滚:

gitrevertolder _ commit ^ . newer _ commit此时,错误提交仍为c和d,将来摇锅时也可以遵循。 然后,这样操作的话,头指针会向后移动,可以直接使用git push命令推送至远程仓库。 这种做法是企业鼓励的。

再举个难一点的例子吧。

假设现在有三个提交。 但是,不巧的是,那个错误的提交正好在中间。 以下图标:

在这种情况下,无法明显地使用git reset命令将头指针重置为a提交。 C提交是正确的,需要保留。 必须先回滚所有c提交和b提交,然后通过使用cherry-pick命令重新生成c提交并生成新的提交c " "来回滚b提交。 完整的流程如下

通过以上比较可以看出,git reset和git revert的最大区别在于git reset将失去以后的提交,而git revert将重新创建新的提交,同时保留原始提交。 在企业中,尽量使用git revert命令,尽量不要使用git reset命令。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。