TortoiseHG:无法部分提交合并

时间:2010-07-29 15:13:44

标签: mercurial merge dvcs tortoisehg

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

  

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

我使用TortoiseHG作为视觉外壳,并使用Beyond Compare进行比较和合并。而且我对所有人都比较陌生。

如何成功完成提交?

6 个答案:

答案 0 :(得分:13)

Mercurial / TortoiseHg告诉您不应该部分提交合并。部分意味着您不会一次提交所有文件。

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

让我们假设您从更改集AB开始,并希望合并它们。这会创建一个如下图形:

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

假设我们在A!变更集中添加了a.txt行到A,并在B!中将b.txt添加到B变更。只是两个不冲突的独立变化。如果Mercurial允许您进行部分提交,那么您可以这样做:

hg merge
hg commit -m 'Added A!' a.txt  # creates M
hg commit -m 'Added B!' b.txt  # creates M'

结果如下图所示:

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

如果您沿路径b.txtBM查看M',那么您会看到B!中的B行被引入{ {1}},已移除M 并重新引入M'

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:3)

  

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

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

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

话虽这么说,我对命名分支(即:新头)进行了一些更改,将其合并回默认分支,退出TortoiseHG GUI而不提交,进行了一些更改,然后提交没有问题。我会在原始查询下面提出一些澄清问题。

答案 3 :(得分:1)

我遇到了这个问题,因为我删除了一些文件。我还原了文件以恢复它们,然后能够提交。然后我删除了文件并进行了第二次提交。

答案 4 :(得分:0)

我遇到了同样的问题,我没有指定任何文件并使用命令行。

问题是我的.hgrc

中的[default]部分
[defaults]
commit = -X project/web.config

因此,它默认为每个提交操作添加了特定文件。

查看您的默认部分,了解潜在问题。

答案 5 :(得分:0)

我遇到了同样的问题,我给出的命令是

  

hg commit -m与1234合并

我发现一段时间后,提交命令“与1234合并”必须用引号引起,因为命令将“与”和“ 1234”作为文件名参数。

请检查您的情况。