【问题标题】:How to merge with mercurial如何与 mercurial 合并
【发布时间】:2013-11-11 23:53:25
【问题描述】:

我创建了一个 repo 并对文件进行了一些更改。然后我承诺并继续工作。进行了一些更改,我再次承诺。 我不得不回到第一个版本,所以我做了:

hg up 5f01300

第一个版本的文件又回来了。

我做了一些更改并再次提交。

hg commit -m 'Updated'

创建了一个新头,然后我尝试了:

hg push

Mercurial 说有 “杰出的未承诺” 东西。

我再次尝试提交:

hg commit -m 'Changes accepted'

然后我输入:

hg merge

所以出现了很多错误,因为有两个头,我无法合并它们。

有时我会尝试像上面那样进行合并,但效果很好。通常在我第二次尝试重复该过程时,它会中断并且我无法合并任何内容。

有人可以教如何正确合并吗?

[一些错误]

通常,在第二次,会发生这种情况:

int main(int argc, char **argv)
{
        printf("hello, world!\n");
<<<<<<< local
        printf("sure am glad I'm not using CVS!\n");
=======
        printf("sure am glad I'm using Mercurial!\n");
>>>>>>> other
        return 0;
}

我必须这样做:

hg resolve -m hello.c

【问题讨论】:

标签: macos mercurial merge bitbucket


【解决方案1】:

合并是您合并不同版本文件的方式。每当您以两种不同的方式更改文件时,Mercurial 都会在您运行 hg merge 时尝试合并它。

当对文件的更改不重叠时,Mercurial 可以自动进行合并。但是,如果您以两种不同的方式更改同一行,那么您需要帮助 Mercurial 合并两次编辑。

考虑在第一个修订版中以hello, world! 开头,然后在第二个修订版中更改为sure am glad I'm not using CVS! 的文件:

"hello, world" --- "sure am glad I'm not using CVS!"

您现在更新回第一个修订版并对文本进行不同的更改:

"hello, world" --- "sure am glad I'm not using CVS!"
               \
                \
                 \
                   "sure am glad I'm using Mercurial!"

您现在有一个分歧历史记录,当您hg merge时,Mercurial 会告诉您它在文件中检测到一个冲突。 Mercurial 将搜索merge tool,如果在您的系统上找不到任何内容,它将转储文件中的冲突更改。然后文件如下所示:

<<<<<<< local
sure am glad I'm not using CVS!
=======
sure am glad I'm using Mercurial!
>>>>>>> other

您看到的标记称为合并标记,它们向您显示文件中无法自动合并的区域。标有local 的顶部区域是您在输入hg merge 之前在工作副本中拥有的版本。标记为other 的底部区域是您合并的分支上的版本。

Mercurial 知道文件未解析,您可以使用hg resolve --list 查看。您现在编辑文件以某种方式组合这两个版本。这是一种组合:

sure am glad I'm using Mercurial and not CVS!

我删除了合并标记并留下了我喜欢的版本。您现在将文件标记为已解决并提交合并:

$ hg resolve --mark hello.c
$ hg commit

希望对你有帮助!


另一条评论:你写

[...] 我试过了:hg push。 Mercurial 说有“杰出的未承诺”的东西。

当您尝试推送时,Mercurial 从不谈论未提交的更改。推送和拉取与您的工作副本(未提交的更改所在的位置)无关。所以用脏的工作副本推拉是可以的。你想到的错误可能是

$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg merge
abort: outstanding uncommitted merges

也就是说,在提交或中止当前合并之前,您不能开始新的合并。

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2011-05-08
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多