git revert 使用详情(转载)

1,一个场景

描述一个git revert使用场景,加深一下对git revert的使用,场景如下:

  • Step 1:小辉在分支dev1上开发,提交了4次(分别为c1、c2、c3、c4),发布时需要把dev1分支合并到master分支上,生成了提交记录m5,并发布到线上。
  • Step 2: 小王在分支dev2上开发,提交了1次(c3),然后也把dev2分支合并到master分支上,生成了提交记录m6,并发布到线上。
  • Step 3: 不幸的是,小辉的dev1分支上存在bug,需要回滚dev1上的所有提交。

在这里插入图片描述

2,从简单场景说起

假设在上面的场景中没有小王dev2的提交,即把上面的场景简单化(如下图),流程如下:

  • Step 1:小辉在分支dev1上开发,提交了4次(分别为c1、c2、c3、c4),发布时需要把dev1分支合并到master分支上,合并的时候采用的是禁止快进式合并,即执行命令 git merge --no-ff dev1 生成了提交记录m5,并发布到线上。
  • Step 2: 不幸的是,小辉的dev1分支上存在bug,需要回滚dev1上的所有提交。

在这里插入图片描述

切到master分支上,使用 git log --graph 看出:

在这里插入图片描述

这里可以采用命令 git revert -m 1 77cb206f6b5db591a43eb55899b84f161656694f,即保留 master 主分支(1代表保留master主分支,revert掉另外一个分支的提交),revert 完成后再看 log 会生成一个 revert 提交m6,如下图:

在这里插入图片描述

简化图如下:

在这里插入图片描述

上面进行了分支的成功回滚,但带来一个问题,若小辉在dev1分支上修复完bug后在再提交生成了c5,此时再去合并到master分支,之前c1到c4次提交会消失,而只有c5的提交,此时应该怎么办?

此时切到master分支,再对 m6 提交进行反向 revert 一次就会找到c1~c4次提交,此时再进行dev1合并就可以了,命令如下:

git checkout master
git revert 11e7d194b73f6276ad07ee56502e98b6dbfe357e  反向revert
git merge --no-ff dev1   合并dev1
git push origin master

如下图:

在这里插入图片描述

简化图如下:

在这里插入图片描述

3,回到复杂的场景

理解了简单场景,复杂的场景只不过细心点就可以解决了,再看文中开头提到的场景:

在这里插入图片描述

思路如下:

  • Step 1:revert掉m5提交,会生成m7提交,达到master分支去除dev1分支的所有修改。
  • Step 2:切到dev1分支上修改,进行bug修改,在dev1分支上生成c5。
  • Step 3切到master分支上,对m7进行反向revert生成 m8 提交。
  • Step4:合并dev1分支,即可达到修复dev1分支上bug的问题。

在这里插入图片描述

上面的整体实战示例如下图(图中为了简便,只进行了dev分支c1和c2提交):

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值