合作开发经常会提merge request嘛, 然后就提了一个不该提的, 还手抖给合并了….

返现问题以后准备回退, 然后抬眼一看各分支的合并情况….

哇脑壳痛, 这就用不了平时最喜欢的 reset 了, 查了查资料, 想取消某一次 merge requestrevert 是最合适的

接下来分三步,先找到要回退的那次 mr, 通常是这样的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
git log 

commit 365ea982c24f2c60150df6159734ab73b74515bc (origin/master, origin/HEAD)
Merge: 465fbfb8 f15b39ae
Author: xxx <xxx>
Date:   Thu Oct 25 15:41:10 2018 +0800

    Merge branch 'master' of xxxxxxxxxxxxxxx

commit 465fbfb8084089f9d08516b4d75ba51ae5dcd5ce
Author: xxx <xxx>
Date:   Thu Oct 25 15:41:03 2018 +0800

    merge

commit 1e309ff40fd02d1c9c6e604c2649d8a94086a573
Author: xxx <zhangkaixuan>
Date:   Thu Oct 25 15:40:37 2018 +0800

    merge

...

这样的, 这只是 log 的中间的一部分, 假设 mr 之后后续又有很多 mr 已经合并了, 那么先找到我们要回退的 commit id, 这里就假设一个叫 c76627674dedf4fc067cb0c5b2afbc123fd9c053

  1. 执行 git revert -m 1 c76627674dedf4fc067cb0c5b2afbc123fd9c053

    通常执行这一步之后没什么冲突就可以了, 然后有冲突了, 就和正常的 merger conflicts 处理一样

  2. 解决完冲突, 执行 git revert --continue 这就算合并了

    那么回滚到一半不想做了, 也好说, 执行 git revert --abort 以后, 大家就当无事发生过

关于 git revert -m 1 这个1指的是 mainline, 1 代表着 master 这条线 资料参考: Why does git revert complain about a missing -m option?