30

我试图弄清楚如何将分支从单独的回购合并到当前。

我有以下内容:

PJT1 - 包含分支 default 和 foodog

PJT2 - 包含分支默认值

从 PJT2,我执行以下操作:

$ hg fetch -y ../PJT1 -r foodog -m "this is a test"

现在,如果我查看 PJT2,我会看到正确的文件和更改。但是,如果我这样做hg branches,我会得到以下信息:

[someone@myhome pjt2]$ hg branches
foodog                         1:c1e14fde816b
default                        0:7b1adb938f71 (inactive)

hg branch揭示以下内容:

[someone@myhome pjt2]$ hg branch
foodog

如何从 PJT1 的foodog分支中获取内容到 PJT2 的default分支中?

4

2 回答 2

55

您需要合并,但请记住分支 foodog 上的更改将始终在 foodog 上 - 分支永远不会消失,但它们可以被隐藏。这一系列命令与您所要求的非常接近:

cd PJT2
hg update default # just in case you were somewhere else
hg pull ../PJT1 -r foodog  # that gets you foodog
hg merge foodog  # that merges the changes into default
hg commit # commit the merge
hg update foodog # go to the most recent change in foodog (note: it is not a 'head')
hg commit --close-branch

合并后hg branches仍然会显示foodog,除非你这样做hg branches --active只显示有头的分支。之后commit --close-branch你不会看到foodog,除非你这样做hg branches --closed

这是因为 Mercurial 中的分支永远不会完全消失(一个设计特性),它们通常只保留用于诸如release-1.0or之类的终生事物stable。对于像错误和功能这样的短期工作,请考虑使用书签。这是两者的一个很好的比较: http: //stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial

于 2011-03-03T21:56:21.890 回答
0

您也可以尝试使用rebase扩展。它看起来像这样:

hg fetch -y ../PJT1 -r foodog -m "this is a test"
hg rebase --source <sRev> --dest <dRev>

rebase 操作将分离变更集sRev和所有后代,并将更改组应用于变更集dRev。默认情况下,更改将应用​​于默认分支。因此,在您的情况下,sRev将是分支foodog上的第一个变更集,而dRev将是您想要应用它们的默认变更集。

最后,如果您想覆盖它并保留源分支名称,您可以使用 rebase 选项--keepbranches。您的问题表明这正是您不想做的,但仍应注意。

于 2011-03-04T22:03:18.017 回答