假设我有一个名为分支'B1',我正在进行功能开发。 我在演示之前处于一个很好的停止点,虽然没有使用该功能,所以我:
hg up default
hg merge B1
hg ci -m "merged in feature drop"
hg push
现在我继续工作了半个小时左右,只是意识到我忘记更新回B1并且我当前的工作目录在default
- 喔。理论上我应该能够将我的工作目录parent标记为B1的提示 - 是否有一种简单的方法可以做到这一点?
我当然可以提交,更新回B1,然后合并我的更改,但是默认情况下会出现一个不稳定的变更集,这对我来说经常发生,我想要一个真正的解决方案。
答案 0 :(得分:29)
两种方式。首先,显而易见的方式:
hg diff > foo
hg up -C b1
hg import --no-commit foo
rm foo
第二,神奇的方式:
hg up -r 'ancestor(., b1)' # take working dir back to the fork point
hg up b1 # take it forward to the branch head
这种方式涉及合并。根据你的分支有多少分歧,这可能是无痛的。或者它可能很复杂,你可能会弄乱你在任何地方都没有保存的更改。这就是为什么像我这样的魔术师更喜欢第一种方式。
答案 1 :(得分:10)
我会使用搁架扩展。我认为它与TortoiseHg一起发布,您也可以在UI中使用它:
hg shelve --all
hg up B1
hg unshelve
答案 2 :(得分:4)
Rebase extension允许您为错误提交的变更集的任何提交更改父级。
如果您只想更改分支以供将来提交 - MQ(如上所述)或Shelve
答案 3 :(得分:2)
通常对于这种动态方法,我更喜欢mercurial队列。
在您的情况下,我会做的是在默认情况下使用更改创建补丁,关闭补丁,切换到B1,然后应用补丁。
它类似于:
hg qnew OOPSPATCH
hg qrefresh
hg qpop
hg up B1
hg qpush
<hack hack>
hg qrefresh
hg qfinish
答案 4 :(得分:1)
您只需要简单的hg up -m B1
来自hg up --help
:
options:
…
-m --merge merge uncommitted changes
…