Mercurial合并分支?(中止:推送创建新的远程分支)

Mercurial合并分支?(中止:推送创建新的远程分支),mercurial,Mercurial,我是Mercurial的新手,在主存储库更新之前,我犯了在不同系统上进行不同更改的错误。(我知道这就是Mercurial的目的,但我的大脑正在努力解决这个问题。) 现在,在我的主开发服务器上,所有内容都是最新的。然而 $ hg push abort: push creates new remote branches: 4f2672f039d7! (use 'hg push --new-branch' to create new remote branches) 我真的不想要一个新的分支机构。我

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

现在,在我的主开发服务器上,所有内容都是最新的。然而

$ hg push
abort: push creates new remote branches: 4f2672f039d7!
(use 'hg push --new-branch' to create new remote branches)
我真的不想要一个新的分支机构。我只想合并所有更改

$ 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
给我指出正确的方向

编辑:(添加细节)

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

$ hg merge
abort: branch '4f2672f039d7' has one head - please merge with an explicit rev
(run 'hg heads' to see all heads)
我尝试了
hg merge ff5f94e44aba
,以及上面列出的所有rev,每个rev都返回相同的结果:

$ hg merge 267abda62069
abort: merging with a working directory ancestor has no effect

从远程提取,然后首先更新/合并/提交。那么你就不会创建新的分支。

当我错过合并时,就会发生这种情况。我喜欢这方面的OrtoisehG工作台,因为通过可视化可以更容易地找到您遗漏的内容


将来避免这种情况的一个好方法是fetch扩展,我是如何停止得到这个错误的。将你的post pull设置为fetch,它会自动为你合并,这非常好。如果有冲突,它会显示您使用的任何冲突解决程序。

看起来您不小心用一个愚蠢的名称创建了一个分支。您最可能要做的是使用一个更有意义的分支名称重新应用更改。没有完全自动的方法可以做到这一点,但是您可以将每个变更集提取为补丁,恢复到混乱的状态,并在适当的分支上重新应用这些变更

基本上,您需要做的是查看变更日志;可能通过运行
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
现在您已经在本地存储库中进行了两次更改;一次是在怪异分支上提交,另一次是在右侧分支上提交。您可以使用
hg push-b GOODBRANCH
将这些更改推送到中央回购协议中,这样只有右分支的更改才会上升;或者,您可以安装以从本地回购中删除不希望的更改,然后可以正常推送


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

这是我应该做的。但我没有。(我想我喜欢用艰苦的方式学习。)所以现在我需要弄清楚如何纠正我做错了的事实。你应该仍然能够做到。现在,你有两个脑袋。这不是问题。。。
$hg merge
命令正是针对这个问题的。这是工作流程的100%正常部分,Mercurial非常非常好地支持它。好的,谢谢。我对此有问题,并将更新问题以反映它。看起来OP是在非windows平台上,但我同意OttoisehG对windows用户很好。我非常想念非windows平台。但我想我可以这样使用像乌龟这样有趣的工具。我同意。总体而言,非windows更好,但windows的糟糕之处意味着许多人已经构建了非常好的GUI应用程序来解决问题。现在,要是他们能好好地把所有的港口都倒过来就好了;)我基本上是这样做的,但是我使用了
hg strip
(mq扩展)来删除变更集,然后重新添加我从
hg diff
保存的必要更改。我倾向于在之后做strip,这样我就可以看到所有的更改,好的和坏的。我没有强调strip的使用,因为它是一种扩展,历史重写在mercurial社区中并不受重视,尽管它非常实用。