当前位置:   article > 正文

git revert以及revert的恢复_git revert后怎么恢复

git revert后怎么恢复

一:背景与方案

在工作中遇见的这样的场景:

场景一:

已经merge到待发布的版本分支中的功能需要移除当前的分支,改在后续版本发布,示意图如下,展示的是commit序列,
在这里插入图片描述
这里想要移除的功能是commit_2的,所以需要在不改动其他commit相对顺序前提下,将这个‘瘤’取下,因此这里就绝对不推荐git reset的方式,因为如果commit_2在末尾可以,如果不在末尾,将导致commit_2后的提交都被清空,这里要使用git revert的方式,像链表从中间删除元素一样,保持其他提交的顺序。

git checkout -b revert_commit origin/master   #从远程分支上创建本地的revert分支
git revert commit_2    #注意这里commit_2是指定的提交id,注意这步可能会冲突,因为有可能其他人在你这个提交基础上做了工作,要解决冲突
git add .  #这一步用来解决冲突后添加文件到暂存区,没有冲突不需要
git commit -m 'revert commmit_2'     #设置revert的提交信息
git push origin revert_commit:revert_commit     #上传本地的revert分支
git merge revert_commmit master     #分支合并
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

场景二:

上一个版本已经定了,如下的commit顺序,这里commit_2是虚线表示记录还在,但是代码不在,可以理解为commit_2是一个加法,revert1是针对commit_2的一个减法。

在这里插入图片描述
问题来了,当前master分支上是如上图所示的提交日志,现在新版本又需要这个commit_2的代码了,这里注意有一个坑的方法,我们也先说坑。
很多人觉得无所谓,我本地更新最新的master分支代码,恰好我之前写的commit_2本地还有分支,我直接rebase一下不就可以了吗?而且应该会生成一个新的commit_5紧接在revert1后面。
问题来了,rebase就是这个坑,使用rebase变基,相当于把你本地的这个分支(注意和远程上的现在侧commit_2合并的分支一个名字)再次merge一遍,但是你要注意,最新的commit是revert1,是摘除这个分支的merge请求,会导致你无论rebase多少次,这个commit_2的代码都不会出现,被revert1抵消掉了,而且会使得你本地的这个分支也被rebase掉,还需要git reflog&git reset --hard HEAD@{i}恢复。
解决方法:

方法1:负负得正(推荐)

既然revert剔除了我的commit_2提交,那我再revert这次revert,负负得正不就行了?确实有效。
这里注意要找对那个revert的commit_id

git revert revert1   #注意,还是有可能冲突的,有冲突要解决然后add就不重复了
  • 1

执行成功后最终本地的commit日志如下,这里commit2的代码也恢复了,随后在push,merge到remote即可
在这里插入图片描述

方法2:新建分支重新提交(不推荐)

这个方法我其实不想写,但是也是写到rebase坑的时候想到的,新建一个不同名的分支,在commit_2代码量不大的情况下,重新拷贝到新分支上,然后重新提交,merge,这样绕过了revert1的限制,本质上这个方法就是重写。

二:工作中的实际操作(针对场景2)

以下数据已经经过脱敏处理。

git log    #找到revert处
  • 1
commit f71b258de85679d5cdad395f6d8ac675f9817a1a
Author: leel 
Date:   Wed Nov 9 17:39:13 2022 +0800

    add version 1.0.0

commit 395b7f8fd8b29eefd25e41358f23a71f7ab93184   <------------------这里是上次revert的id
Author: liming 
Date:   Wed Nov 9 17:27:34 2022 +0800

    Revert "update rules"

    This reverts commit 215d734c866ed8adb88e8c33ed6fe624d349a9a8.

commit 23734eb14c7feb19716b6a9aa9fb7aa4c9d4b5f4
Merge: b866e32 246894a
Author: xiaohong 
Date:   Tue Nov 8 11:14:24 2022 +0800

    extended api verification common

commit 246894a619ad61c58dce1a8140196eaabc7e82ca
Author: xiaohong 
Date:   Tue Nov 1 17:43:37 2022 +0800

    extended api verification common
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
$ git revert 395b7f8fd8b29eefd25e41358f23a71f7ab93184
[cancel_revert_update_rules 4a2b079] Revert "Revert "update rules""
 5 files changed, 78 insertions(+), 57 deletions(-)
  • 1
  • 2
  • 3

发现没冲突,而且git log已更新

$ git log
commit 4a2b0796190aa950ab8b9b75367ff80fbb3cd43d
Author: leel
Date:   Thu Dec 22 12:22:30 2022 +0800

    Revert "Revert "update rules""    <--------------------------更新了revert revert 即负负得正

    This reverts commit 395b7f8fd8b29eefd25e41358f23a71f7ab93184.

commit b6abc418f808cfcddee25e163299195b9ebde440
Merge: b2dee9d bf1b916
Author: xiaohong
Date:   Wed Dec 21 10:26:54 2022 +0800

    remove side
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

然后就是常规的git commit -m&git push 略

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/965542
推荐阅读
相关标签
  

闽ICP备14008679号