前言:我的代码不能上线,但是我合并到了clone上去,此次merge clone的comit我们称之为"AAA"。clone上去有别人正在开发要上线的代码。

原本我以为回退一下就行,结果发现有其他人拉了clone合并,导致我不能上线的代码在其他人的分支上也存在了,而且还push到clone更新了。

解决办法:

第一步:先让我们的代码消失
  • 基于clone建一个clone-test分支, 执行git revert “合并分支id” -m ;

  • “合并分支id”,指的是我merge 到c lone的那一次commit,执行这条语句,他会把你这一次合并的你的分支的代码去掉,

  • 执行过后一般会有冲突,这时候需要解决冲突,然后push上去,这时候你的clone-test就 === “clone分支,但是没有了你的分支的代码。“

  • 也就是领先于clone分支一次commit。把这一个commit我们称之为 ‘BBB’

  • 可以理解成,你手动在clone分支上把你的代码都删除了,然后push上去了,就是这个效果。

第二步:在我们的分支找回我们的代码
  • 然后你自己的分支去merge clone-test的时候会发现你写的代码都会被覆盖掉,删掉,因为clone-test永远会有一个commit “BBB”,用来去掉你之前合并到clone的那部分代码。

  • 正确做法:先merge clone-test,把你的写的代码覆盖删除掉,然后执行,

git cherry-pick AAA -m
  • 这条语句的意思是将AAA(commit ID)拉取出来,也就是我们第一次合并到clone的时候,他会把代码的改动拉取出来,然后重新加到你的代码,

  • 这时候你的代码就有一个最新的commit ‘CCC’,他的作用就是将你的代码以新增的方式重新写入分支。

  • 就好比你的分支拉去了clone-test之后,你写的代码不见了,但是你又重新写了,再push上,效果一样。

总结

分支顺序应该是 AAA => BBB => CCC

在AAA的时候把代码merge到clone,发现不对劲,通过git revert,重新push了BBB,BBB就是用来删除你的代码。

最后在自己的分支,合并BBB,那么你的分支最新commit也是BBB,你的分支上的代码也不见了,然后再通过

git cherry-pick AAA -m ,将AAA的代码拉出来,作为新的commit CCC 重新push到你的分支上去,

这样你的分支的最新commit是CCC , 就有所有的代码

但是clone分支的commit只到BBB,也就是没有你的代码了。

解决。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐