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

时间:2011-09-16 17:37:32

标签: mercurial

我是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以及上面列出的所有转化版,每个转化都会返回相同的结果:

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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

现在,您已在本地存储库中进行了两次更改;一次作为奇怪分支的提交,再一次作为右分支的提交。您可以使用hg push -b GOODBRANCH将这些更改推送到中央仓库,这样只有对右分支的更改才会上升;或者,您可以安装strip extension以从本地仓库中删除您不想要的更改,然后您可以正常推送。

听到它的声音;在推送之前,您仍然必须处理对中央存储库所做的更改,因为您从另一个仓库推送了更改。您可能希望在之后合并,以清理本地仓库中的更改历史记录。

答案 2 :(得分:3)

当我错过合并时,我已经发生了这种情况。我喜欢TortoiseHg工作台,因为通过可视化可以更容易地找到您错过的内容。

将来避免这种情况的好方法是获取此错误,这是fetch扩展。将你的帖子设置为fetch,它将自动为你合并,这非常好。如果存在冲突,则会出现您使用的任何冲突解决方案。