【问题标题】:Mercurial branched revision history, two remote heads when pushingMercurial分支修订历史,推送时两个远程头
【发布时间】:2010-11-05 20:19:49
【问题描述】:

我在本地(23-28)提交了一堆变更集,然后我意识到我想回到修订版 25,所以我运行“hg up -r 25”返回。然后我从那里开始工作并提交了一些变更集。现在我准备将我的更改推送到服务器,但是当我尝试这样做时,它会抱怨“中止:推送在分支'默认'上创建新的远程头!”。我认为其他人可能已经提交到存储库,所以我做了一个 hg pull,但没有得到任何更改。

这是我正在使用的修订树

 23
 |
 24
 |
 25
 / \
26 29 
|   |
27 30
|   |
28 31
    |
   32
    |
   33
    |
   34
    |
   35

是否可以删除修订版 26、27 和 28?我怎样才能解决问题,以便我可以运行“hg push”而不会出错?我是否应该使用不同的命令返回到修订版 25?

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    让我对 Lasse 的回答表示反对。 Mercurial 是一个关于构建不可变历史的系统。想想一位科学家在他或她的实验室书籍中用钢笔在编号页上工作。一切都很重要,即使是你希望你没有写的东西,也不想在这一秒。出于某种原因,默认情况下不启用 strip 命令 - 它违反了作为一个反复无常的目标的不变性。

    解决这个问题的更“善变”的方法是将 26 合并为 35,从 35 中完全选择选项,这样你就回到了一个头上。那么你的 push 仍然只有一个头,但是所有的历史都被保留了。

    或者,您可以选择“hg push -r 35”,这不会给您任何警告或错误,也不需要 -f,因为您将只留下一个头。

    strip 没有错,但它不是 Mercurial 中传统工具集或思维方式的一部分。

    【讨论】:

    • 我确实同意这一点,但听起来他做了他后悔的事情,在这种情况下,我认为从存储库中删除不正确的路径是正确的方法。就我个人而言,我可能会从原始存储库中重新克隆,然后删除路径错误的克隆,但由于他没有这样做,因此删除似乎没问题。但是如果代码很好,只是不是你现在想使用的东西,那么保持它的某种方式也是我的第一选择。在任何情况下,Mercurial 都有适合所有情况的选项,所以这里有很大的选择空间:)
    • 是的,这绝对是一个没有对错之分的场景,但有一种观点认为,您输入的任何字节都没有价值,即使是,也不是开发人员的决定。这不是每个人都适合的操作模式,但它是 Mercurial 的默认操作模式,所以每次有人建议剥离 w/o 提供对位时,我都会提出它。
    • 请参阅stackoverflow.com/questions/7475634/… 了解如何进行这种一次性合并。
    【解决方案2】:

    嗯,我知道有两种方法。

    注意:请进行备份或克隆以进行实验,我不对任何丢失的工作负责

    首先,如果您启用了 MQ 扩展,您可以将其去掉。 我只知道如何使用 TortoiseHg 来做到这一点,但在这里发布后我会找到正确的命令。

    为此,您将执行以下命令:

    hg strip 26
    

    其次,您可以仅在本地创建一些变更集的新克隆,我只知道如何使用 TortoiseHg

    为此,您将执行以下命令:

    hg clone SOURCEDIRECTORY CLONEDIRECTORY -r35
    

    然后,从您的克隆中,在验证它包含您想要的变更集之后,您推送到目标存储库。


    至于回答你应该做的事情,你可以删除你的原始克隆并从服务器重新克隆以获得一个只包含最多变更集 25 的干净克隆,但当然你可以使用 strip 命令然后也摆脱多余的变更集。

    【讨论】:

    • 是的,我在远程服务器上使用命令行。所以我想要命令行命令。
    【解决方案3】:

    拥有多个头本质上没有任何问题 - Mercurial 只是检查它是否是您想要的。在这种情况下,您可能希望保留废弃的开发路径以供将来参考。如果是这样,只需强制推送(使用hg -f push)并创建废弃的分支。如果你只是想忘记它的一切,@Lasse's answer 很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2011-09-10
      相关资源
      最近更新 更多