TortoiseHG:无法部分提交合并

Rom*_*iko 11 merge mercurial dvcs tortoisehg

我试图在Mercurial中合并两个头.合并后,我没有提交并做了一些更改.然后我尝试提交并收到以下消息:

abort:无法部分提交合并(不指定文件或模式)

我使用TortoiseHG作为视觉外壳,使用Beyond Compare进行比较和合并.我对他们所有人都相对较新.

我该怎么做才能成功完成提交?

Mar*_*ler 13

Mercurial/TortoiseHg告诉您不应该部分提交合并.部分表示您不会一次提交所有文件.

此消息的根本原因是,它会给您错误的结果.在Mercurial中合并两个更改集时,您将创建一个包含两个父更改集的新更改集.此合并更改集向其他人显示您希望其他人如何组合这两个更改集.

让我们想象一下,你开始的变更AB,并希望合并.这会创建一个如下图形:

... --- [A]
           \
            [M]
           /
... --- [B]
Run Code Online (Sandbox Code Playgroud)

假装我们增加了行A!a.txtA变更和我们添加B!b.txtB变更.只是两个不冲突的独立变化.如果Mercurial允许您进行部分提交,那么您可以这样做:

hg merge
hg commit -m 'Added A!' a.txt  # creates M
hg commit -m 'Added B!' b.txt  # creates M'
Run Code Online (Sandbox Code Playgroud)

结果是这个图:

... --- [A]
           \
            [M] --- [M']
           /
... --- [B]

如果你看一下b.txt沿着路径B,M,M',然后你会看到,随着线B!被引入B,在取出M和重新M'!

这不是您想要的合并变更集:部分合并会从一个分支中抛弃更改,只是为了在后续提交中再次引入它们.当你创建水银信任你M:它真的认为,M包含的正确组合AB.特别是,如果B!删除该行M,则在M与其他更改集合并时它将保持不变.

因此,Mercurial试图通过不允许部分合并来保护您免于创建糟糕的历史记录.


小智 7

我认为你在hgrc文件中有别名.尝试删除[alias]部分并再次提交.

  • 我不认为这个答案是罗马的问题,但它对我很有帮助.在[default]部分的.hgrc中,我有:"commit = -X index.php".HG不够聪明,弄清楚合并不涉及index.php.是的,我知道即使拥有那条线也很蹩脚......;) (2认同)

dls*_*dls 3

我应该怎么做才能成功完成提交?

Mercurial(或 git 或任何其他DVCS )的好处之一是,您可以在开发过程中的任何时候执行提交,并且它既快速又私密。它会很快,因为您应该提交驻留在硬盘驱动器上的存储库的本地副本,并且它将是私有的,因为在您将它们推送到服务器(或其他主存储库)之前没有人会看到您的更改集。

因此,为了部分回答您的问题,适当的做法是在不进行其他更改的情况下提交合并,然后应用并提交下一波更改。如果您使用 TortoiseHG 执行合并,它实际上会提示您在离开 GUI 之前提交合并,因为这是预期的 HG 工作流程。

话虽这么说,我对命名分支(即:新头)进行了一些更改,将其合并回默认分支,退出 TortoiseHG GUI 而不提交,进行了更多更改,然后毫无问题地提交。我将在您最初的询问下面提出一些澄清问题。