记录一次需要删除某个commit的代码。
前言:我的代码不能上线,但是我合并到了clone上去,此次merge clone的comit我们称之为"AAA"。clone上去有别人正在开发要上线的代码。原本我以为回退一下就行,结果发现有其他人拉了clone合并,导致我不能上线的代码在其他人的分支上也存在了,而且还push到clone更新了。解决办法:第一步:先让我们的代码消失基于clone建一个clone-test分支, 执行git reve
前言:我的代码不能上线,但是我合并到了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,也就是没有你的代码了。
解决。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)