Mercurial合并分支机构?(abort:push创建新的远程分支)

Mik*_* S. 13 mercurial

我是Mercurial的新手,我错误地在主存储库是最新的之前在不同的系统上进行了不同的更改.(我明白这就是Mercurial的目标,但是我的大脑正在努力解决这个问题.)

现在在我的主开发服务器上,一切都是最新的并且已经提交.然而...

$ hg push
abort: push creates new remote branches: 4f2672f039d7!
(use 'hg push --new-branch' to create new remote branches)
Run Code Online (Sandbox Code Playgroud)

我真的不想要一个新的分支.我只想要合并所有的更改.

$ hg heads
changeset:   459:ff5f94e44aba
branch:      4f2672f039d7
tag:         tip
parent:      458:e63d02baf4cf
parent:      455:267abda62069
user:        mike@...
date:        Tue Sep 13 14:25:16 2011 -0400
summary:     Images from prof

changeset:   455:267abda62069
parent:      453:a74757e26357
user:        mike@localhost.localdomain
date:        Tue Sep 13 09:08:12 2011 -0400
summary:     images for FLC
Run Code Online (Sandbox Code Playgroud)

指出我正确的方向?

编辑:(添加细节)

当我尝试合并时,我得到以下结果:

$ hg merge
abort: branch '4f2672f039d7' has one head - please merge with an explicit rev
(run 'hg heads' to see all heads)
Run Code Online (Sandbox Code Playgroud)

我尝试过hg merge ff5f94e44aba,以及上面列出的所有转速,每一个都返回相同的结果:

$ hg merge 267abda62069
abort: merging with a working directory ancestor has no effect
Run Code Online (Sandbox Code Playgroud)

Sin*_*ion 4

看起来您不小心创建了一个名称很愚蠢的分支。您最可能想做的是使用更有意义的分支名称重新应用更改。没有完全自动的方法可以做到这一点,但您可以将每个变更集提取为补丁,恢复到搞砸的位置,然后在正确的分支上重新应用这些更改。

基本上你需要做的就是查看变更日志;可能是通过运行来hg out查看中央存储库中缺少什么。记下您想要保留的每个转速。

下次更新到最后一个好的修订版。确保您位于您希望提交的分支上。

现在您将应用所做的每一项更改并提交每一项。您可以像这样自动化此过程:

BADREVS="123 124 125 126"

recommit() { hg di -c $1 | patch -p1;  hg ci -m "$(hg log -r $1 --template '{desc}')";}
for rev in $BADREVS; do
    recommit $rev
done
Run Code Online (Sandbox Code Playgroud)

现在您已经在本地存储库中获得了两次更改;一次是在奇怪的分支上提交,另一次是在正确的分支上提交。您可以使用以下命令将这些更改推送到中央存储库hg push -b GOODBRANCH,以便仅对右侧分支进行更改;或者,您可以安装strip 扩展以从本地存储库中删除您不需要的更改,然后您可以正常推送。

从它的声音来看;在推送之前,您仍然需要处理对中央存储库所做的更改,因为您从另一个存储库推送了更改。您可能希望在清理本地存储库中的更改历史记录后进行此合并。