Mercurial:将工作目录切换到分支而不会丢失更改?

Geo*_*uer 25 mercurial branch

假设我有一个名为分支'B1',我正在进行功能开发.我在演示之前处于一个很好的停止点,虽然没有使用该功能,所以我:

hg up default
hg merge B1
hg ci -m "merged in feature drop"
hg push
Run Code Online (Sandbox Code Playgroud)

现在我继续工作了半个小时左右,然后去承诺只是意识到我忘了更新回B1并且我当前的工作目录已经开启了default- 呃.从理论上讲,我应该只能将我的工作目录标记为B1的提示 - 是否有一种简单的方法可以做到这一点?

我当然可以提交,更新回B1,然后合并我的更改,但是默认情况下有一个不稳定的变更集,这对我来说经常发生,我想要一个真正的解决方案.

mpm*_*mpm 30

两种方式.首先,显而易见的方式:

hg diff > foo
hg up -C b1
hg import --no-commit foo
rm foo
Run Code Online (Sandbox Code Playgroud)

第二,神奇的方式:

hg up -r 'ancestor(., b1)'  # take working dir back to the fork point
hg up b1                    # take it forward to the branch head
Run Code Online (Sandbox Code Playgroud)

这种方式涉及合并.根据你的分支有多少分歧,这可能是无痛的.或者它可能很复杂,你可能会弄乱你在任何地方都没有保存的更改.这就是为什么像我这样的魔术师更喜欢第一种方式.


Lau*_*lst 10

我会使用搁架扩展.我认为它与TortoiseHg一起发布,您也可以在UI中使用它:

hg shelve --all
hg up B1
hg unshelve
Run Code Online (Sandbox Code Playgroud)