代码之家  ›  专栏  ›  技术社区  ›  Jon Snyder

多变的分支修订历史,推时两个远程头

  •  4
  • Jon Snyder  · 技术社区  · 14 年前

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

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

    是否可以删除修订版26、27和28?我该如何修复这些问题,以便运行“hg push”而不会出错?我是否应该使用不同的命令返回到修订版25?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Lasse V. Karlsen    14 年前

    我知道有两种方法。

    首先,如果您启用了MQ扩展,那么您可以去掉它们。 我只知道如何使用龟,但我会找到正确的命令后张贴在这里。

    要执行此操作,请执行以下命令:

    hg strip 26
    

    其次,您可以只在本地创建一些变更集的新克隆 我只知道怎么用龟

    要执行此操作,请执行以下命令:

    hg clone SOURCEDIRECTORY CLONEDIRECTORY -r35
    

    然后,从克隆中验证它是否包含所需的变更集后,推送到目标存储库。


        2
  •  5
  •   Ry4an Brase    14 年前

    让我对拉丝的回答发表异议。Mercurial是一个关于构建不可变历史的系统。想象一下一个科学家在他或她的实验室里用钢笔在有编号的纸上工作。每件事都很重要,即使是你希望在这一刻不写也不想要的东西。strip命令在默认情况下没有启用是有原因的——它违反了作为mercurial目标的不变性。

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

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

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

        3
  •  1
  •   Community CDub    7 年前

    hg -f push )创建废弃的分支。如果你只是想忘记一切, @Lasse's answer 很好。