我有一个变幻无常的存储库。 这是对转答:我做了一些改变,承诺(到B版本),并推。 但是,后来,我意识到我不想让这些更改。 我更新回版本A,并提出了一些可供选择的变化,修订版C.
C
| -
| B
|/
A
不过,现在我不能推C版本,因为它抱怨说,它会创建一个新的远程头(它会)。 我如何使远程善变完全忘记REV B和所有的变化在其中,所以我可以把C版本,并从那里下去呢?
我有一个变幻无常的存储库。 这是对转答:我做了一些改变,承诺(到B版本),并推。 但是,后来,我意识到我不想让这些更改。 我更新回版本A,并提出了一些可供选择的变化,修订版C.
C
| -
| B
|/
A
不过,现在我不能推C版本,因为它抱怨说,它会创建一个新的远程头(它会)。 我如何使远程善变完全忘记REV B和所有的变化在其中,所以我可以把C版本,并从那里下去呢?
我个人倒关闭分支并强制推送(蒂姆Henigan描述),当它离开DAG中是真实的状态。 还有,虽然另一种选择。 做一个虚拟合并 。 这是一个合并,但一个在那里你忽略传入更改。
hg update C
hg -y merge --tool=internal:fail B
hg revert --all --rev .
hg resolve -a -m
hg ci
最终的结果是
M
|\
C |
| |
| B
|/
A
......但M不包含任何的B的变化。
编辑历史是很难的。 一旦你把一个变更到一个公共仓库,它不再能够轻易地从历史修剪。
最直接的解决问题的方法是:
hg update <tip of branch you want to forget>
hg commit --close-branch -m "close unwanted branch"
hg update <tip of branch you want to keep>
--force
因为在树枝上多头现在存在。 如果你真的需要修剪的树枝,然后读EditingHistory一次。 如果它似乎仍然是可行的,可以用在描述的方法之一PruningDeadBranches 。
使用backout
命令扭转b变动。
hg up B
hg backout B
现在,你的工作目录是在它是B,我会打电话给之前的状态A'
。
你回退,让自己真正的改变和提交。 这是你的历史将是什么样子:
C
|
A'
|
B
|
A
在提交对象本身的Mercurial分支是永久性的,注册。 有关闭和/或删除分支机构,主要列举了一些(不是太容易)的方法在这里 。 我甚至已经使用过其中的一些。 请注意,这些是谁做用树枝以为他们可以是暂时的人们多少有些绝望的解决方案。
但是,如果你真的想临时分支,使用书签 。
其他人都为摆脱“B”一些很好的答案,但只是把它在那里,你总是可以做:
hg push --rev C
这将推动C,但没有B和不抱怨新的负责人。