我是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
答案 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,它将自动为你合并,这非常好。如果存在冲突,则会出现您使用的任何冲突解决方案。