Mercurial 在创建多头分支、重基和多个合并后,如何在不创建新头的情况下进行推送
我对共享存储库的本地副本执行了一系列愚蠢的步骤,我正在寻找一种方法来修复它。这些步骤是:Mercurial 在创建多头分支、重基和多个合并后,如何在不创建新头的情况下进行推送,mercurial,Mercurial,我对共享存储库的本地副本执行了一系列愚蠢的步骤,我正在寻找一种方法来修复它。这些步骤是: 我使用书签让一个开发分支有多个负责人,其他人使用: -o---o---o-----o--- <- dev branch \----1----1------ <- another head of the dev branch, where I committed stuff 你只能推一个你感兴趣的头mercurial。对你来说,这意
- 我使用书签让一个开发分支有多个负责人,其他人使用:
-o---o---o-----o--- <- dev branch \----1----1------ <- another head of the dev branch, where I committed stuff
你只能推一个你感兴趣的头mercurial。对你来说,这意味着:
如果目标回购已更新,则需要拉取、合并和重新推送:hg push -r f2033d695fcd
hg pull hg up -r <remote head> hg merge -r f2033d695fcd hg ci hg push
我解决了这个问题,没有将另一头推进回购,也没有将hg拉力 hg-up-r hg合并-r f2033d695fcd 汞离子 汞推力
合并到23853bbf68df
。这可能不是最干净的方法,但我将把它作为参考。简而言之,我通过获取所有提交并重新应用它们来重建整个分支 首先,我在我做的第一个发散版本中使用了strip,杀死了newBranch
的头newBranch
:899344cfb145
然后,我为hg strip -r 646
中的所有提交生成了电子邮件补丁(无法使用mq),因为它从一开始就是:newBranch
hg export -g -r 797:808 -r 810 -r 815:822 -r 824:830 -o "%n-%m.patch"
是797:808
中位于newBranch
重基部分的修补程序(devBranch
从原始图形提交)1'
和810
是815:822
中的其他补丁newBranch
811:814属于不同的分支,所以我不得不排除这些分支
是一个带有823
默认值的合并提交,所以我跳过了这个
是与824:830
合并后的所有提交default
最后,我刚刚剥去了hg up -r 796 # there are 29 patches, applying till merge hg import --bypass {01..21}*.patch hg up tip hg merge default hg ci -m 'merging in default' hg import --bypass {22..28}*.patch
的原负责人newBranch
hg strip -r 797
这可能并不适用于所有情况。在合并的过程中,我也不得不解决一些冲突,但相当温和。希望这对其他人有所帮助。不要使用徒手“绘图”-您可以使用控制台命令,并能够粘贴有问题的格式输出的命令(
或hg log
,例如,对于此处和处的树)。现在,请添加带有注释的hg glog
的输出-哪个head是过时的,不能存在(完全或仅在push target中)。另外,请阅读push commandHi@lazybager中的-r选项,我无法向您提供hg heads
的输出,因为有比我描述的更多的提交,而且我还忘记了为了达到这种状态而执行的确切命令。。。问题已更新,以包含标题的输出。我不理解您对log
选项的引用,它应该如何/为什么有帮助?在这种情况下不需要精确的命令-您(不是我)必须查看devBranch树(从807和820的共同父项到826),定义合并devBranch头的可能性(和必要性)。或者只需按下f2033d695fcd即可enough@LazyBadger,如果我尝试-r
,我会得到hg push-r f2033d695fcd--new branch
。这就是我试图避免的。至少合并这个头部(所有的都会更好)谢谢你的回答,但正如我提到的,这会产生abort:push在分支devBranch上创建新的远程磁头23853bbf68df
。正如@lazybacker所建议的,我将尝试合并这个头部,尽管这是我想要避免的事情。这是一个不同于你实际试图推动的头部。如果使用中止:push在分支devBranch上创建新的远程头部23853bbf68df
指定要推送的磁头,则不会得到该磁头。-r
hg strip -r 646
hg export -g -r 797:808 -r 810 -r 815:822 -r 824:830 -o "%n-%m.patch"
hg up -r 796 # there are 29 patches, applying till merge hg import --bypass {01..21}*.patch hg up tip hg merge default hg ci -m 'merging in default' hg import --bypass {22..28}*.patch
hg strip -r 797