【问题标题】:TortoiseHG: cannot partially commit a mergeTortoiseHG:不能部分提交合并
【发布时间】:2011-03-22 19:11:54
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是使用命令行“hg commit”命令还是使用 TortoiseHG GUI 提交更改?
  • 在发布这个问题之前我已经用谷歌搜索过,并找到了这两个链接:earthli.com/news/view_article.php?id=2360mercurial.selenic.com/bts/issue1226。它们是相关的,但我没有在那里找到任何有用的信息。
  • @dls:我使用了 GUI。切换到命令行解决了这个问题!你能把这个作为答案发布吗?谢谢:)
  • 很好,很高兴 CLI 提供了帮助。可能是使用 GUI 导致您尝试编辑或提交最终合并结果以外的其他内容...
  • 遇到了同样的错误。命令行也为我工作。谢谢!

标签: mercurial merge dvcs tortoisehg


【解决方案1】:

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

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

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

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

【讨论】:

【解决方案2】:

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

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

让我们假设您从变更集 AB 开始并希望合并它们。这将创建一个像这样的图表:

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

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

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

结果如下图:

... - - [一种] \ [毫米'] / ... --- [B]

如果你沿着BMM' 的路径查看b.txt,那么你会看到B! 的行是在B 中引入的,在@987654337 中被删除@ 并在M' 中重新引入!

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

因此,Mercurial 试图通过不允许部分合并来防止您创建不良历史记录。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我不认为这个答案是罗曼的问题,但这对我很有帮助。在我的 [default] 部分的 .hgrc 中,我有:“commit = -X index.php”。 HG 不够聪明,无法确定合并不涉及 index.php。是的,我知道即使有那条线也很笨拙...... ;)
    • 这是给我的,谢谢@kbh 和 fazy。它让我发疯了一段时间。
    • 另外[default] 部分可以包含命令别名;)很好看@kbh,如果您不记得您更改了 Mercurial 设置或者您正在使用其他设置,这是一个很难猜测的常见问题不属于你的机器。
    • 谢谢@fazy。对我帮助很大。
    【解决方案4】:

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

    问题出在我的 .hgrc 中的 [default] 部分

    [defaults]
    commit = -X project/web.config
    

    所以默认情况下它会为每个提交操作添加特定文件。

    查看您的默认设置部分是否存在潜在问题。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        hg commit -m 与 1234 合并

        一段时间后,我发现提交消息“Merge with 1234”必须用引号括起来,因为该命令将“with”和“1234”作为文件名参数。

        请在你的情况下检查它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-27
          • 1970-01-01
          • 2012-04-27
          • 1970-01-01
          • 1970-01-01
          • 2014-06-30
          • 1970-01-01
          • 2015-12-22
          相关资源
          最近更新 更多