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。
当我想要歪曲被创造的头脑时,我曾多次遇到这个问题。 我总是希望看到它从地球表面消失。
在您的本地副本上,获取最新信息,然后:
-
find你想要剥夺头部的开始(新的脖子开始分叉),获取修订版本号
-
剥离它。
来源: TipsAndTricks 。
来源: PruningDeadBranches#Using_strip 。
hg --config extensions.hgext.mq= strip -n <rev>
- 做一个简单的文件更新(添加一个空白文件),提交和推送。
你的回购现在应该被剥夺了头。 最后一步非常重要,因为剥离不会产生任何可以推送到中央存储库的更改。 没有最后一步,你只能在当地剥离头部。