Mercurial:斩首

有一个承诺,只是没有工作,所以我想放弃它,而不删除它的历史。

我已经从早期版本更新并承诺,从而创造了一个新的头。

我没有分支,我不需要分支,我只想简单地继续新的脑袋,没有什么花哨,没有融合,没有后顾之忧,只是继续忘记前一个。

我似乎无法find如何做到这一点,我开始相信这是做不到的。 我发现的只是关于分支的东西,或者关于合并的东西。

用你想要忘记的修订版本更新你的版本库,然后使用--close-branch选项将hg commit (匿名)分支标记为closures。 然后更新到你想要的分支的头部,并继续工作。

你仍然可以看到closures的分支,如果你使用-c选项来表示hg heads ,但是默认情况下它不会显示,并且hg merge会知道不会和封闭的头部合并。

在第一次将这个封闭的头部推送到另一个存储库时,您将需要使用hg push --force ,因为实际上在您推送时在远程存储库中创build了额外的头部。 所以告诉Mercurial这可以用--force 。 拉封闭的人不会受到任何警告的困扰。

我知道在这个阶段你不想和分支合作,这很好,但这正是你所做的。 当你回到以前的版本,并提交了一些工作,你创build了一个分支 – 一个未命名的分支,但一个分支都是一样的。

没有任何问题,就像你一样进行,不用担心有多个头,但是如果你想整理一些东西,所以你不会不小心挑错头,那么你可以杀掉旧的分支。

Mercurial文档中有一个很好的部分介绍了Pruning Dead分支的各种选项。

我认为对您来说最好的select是将旧分支标记为“closures”。 如果你的老头正在修改“123”,那么:

 hg update -r 123 hg commit --close-branch -m 'Closing old branch' hg update -C default 

首先input:

 hg heads 

想象一下,你有三个头:

 changeset: 223:d1c3deae6297 user: Your name <your@email.com> date: Mon Jun 09 02:24:23 2014 +0200 summary: commit description #3 changeset: 123:91c5402959z3 user: Your name <your@email.com> date: Sat Dec 23 16:05:38 2013 +0200 summary: commit description #2 changeset: 59:81b9804156a8 user: Your name <your@email.com> date: Sat Sep 14 13:14:40 2013 +0200 summary: commit description #1 

比方说,你想保持最后的头部活跃(223),并closures其余的。

然后你会这样做:

closures头#59

 hg up -r 59 hg ci --close-branch -m "clean up heads; approach abandoned" 

closures头#123

 hg up -r 123 hg ci --close-branch -m "clean up heads; approach abandoned" 

提交更改

 hg push 

不要忘记在最后切换到正确的头

 hg up -r 223 

你完成了。

你想使用hg backout 。 这将从任何子变更集中删除变更集所做的更改。

检查这一点是一个很好的解释。 水银退出

你可以克隆你的损坏的回购到一个新的没有克隆不需要的头。 然后删除旧的存储库,将新创build的克隆移动到原来的位置,并继续使用它。 这将需要一些时间,但是你会得到一个完全干净的仓库,没有这个不需要的修订的迹象。

 hg clone --rev myGoodResition myDirtyRepo myCleanRepo 

尼尔和尼克的答案都是直接的。 因为我发现自己制造了许多摇摆不定的脑袋,所以我最终写了一个别名来更容易地closures脑袋。 通过添加到您的.hgrc

 [alias] behead = !REV=$($HG id -i); $HG update $@ -q && $HG ci --close-branch -m "Closing dead head" && $HG update $REV -q 

(如果你已经有一个[alias]部分,你可以附加到它)

您现在可以通过一个单一命令(而不必手动更新到其他更改集)closures头像,如下所示:

 $ hg behead 123 

注:别名利用了Mercurial别名可以是shell命令的事实。 这意味着这可能只适用于UNIX,而不适用于Windows。

当我想要歪曲被创造的头脑时,我曾多次遇到这个问题。 我总是希望看到它从地球表面消失。

在您的本地副本上,获取最新信息,然后:

  1. find你想要剥夺头部的开始(新的脖子开始分叉),获取修订版本号

  2. 剥离它。


来源: TipsAndTricks 。

来源: PruningDeadBranches#Using_strip 。

 hg --config extensions.hgext.mq= strip -n <rev> 
  1. 做一个简单的文件更新(添加一个空白文件),提交和推送。

你的回购现在应该被剥夺了头。 最后一步非常重要,因为剥离不会产生任何可以推送到中央存储库的更改。 没有最后一步,你只能在当地剥离头部。