【问题标题】:Is there another way of removing multiple heads?有没有另一种去除多个头的方法?
【发布时间】:2011-10-15 13:46:23
【问题描述】:

假设我有这个:

hg init

touch a
hg add a
hg commit -m a

touch b
hg add b
hg commit -m b

hg up -r 0

touch c
hg add c
hg commit -m c

由于最后一次提交,现在我将有多个头。例如,如果我想保留最后一个头,由提交 c 创建的那个(有效地丢弃 b,以及在第一个之后所做的所有其他提交),我该怎么做?我用 mq 的strip 命令玩了一点,我能够实现我想要的,但我想知道是否有其他方法。

【问题讨论】:

  • 我不认为有guillotine 命令?
  • 我认为它已被弃用:)
  • hg strip 非常适合该任务。不过,乔尔建议的hg clone -r ... 也很完美。您必须决定是要清理现有克隆还是要干净的克隆。

标签: mercurial


【解决方案1】:

是的,还有另一种方法。从上面的示例中,hg glog 的输出看起来有点像这样:

@  changeset:   2:925573c7103c
|  tag:         tip
|  parent:      0:4fe26dfe856d
|  user:        Joel B Fant
|  date:        Thu Jul 28 23:20:45 2011 -0400
|  summary:     c
|
| o  changeset:   1:9dc928176506
|/   user:        Joel B Fant
|    date:        Thu Jul 28 23:20:24 2011 -0400
|    summary:     b
|
o  changeset:   0:4fe26dfe856d
   user:        Joel B Fant
   date:        Thu Jul 28 23:20:12 2011 -0400
   summary:     a

如果您克隆 test指定一个修订版,它只会克隆该修订版及其祖先。所以如果你的 repo 的目录是TwoHeadsMightNotBeBetter,你可以去它的父目录并发出:

hg clone TwoHeadsMightNotBeBetter OneHeadIsFine -r 925573c7103c

我在其中指定了变更集 ID,但您也可以改用 -r 2,甚至可以使用 -r tip,因为它目前是该 repo 的提示。现在,当您进入新克隆并执行hg glog 时,您只有一个头:

@  changeset:   1:925573c7103c
|  tag:         tip
|  user:        Joel B Fant
|  date:        Thu Jul 28 23:20:45 2011 -0400
|  summary:     c
|
o  changeset:   0:4fe26dfe856d
   user:        Joel B Fant
   date:        Thu Jul 28 23:20:12 2011 -0400
   summary:     a

如果你有 3 个头并想保留 2 个,那就有点不同了。您必须使用 -r 克隆其中一个,并在 hg pull 上指定 -r 以提取特定分支。

【讨论】:

  • 或在克隆时多次指定-r,或使用修订集。
【解决方案2】:

您还可以对包含 b 的变更集(在本例中为变更集 1)执行虚拟合并:

$ hg --config ui.merge=internal:fail merge 1
resolving manifests
getting b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

$ hg revert --all --no-backup --rev .
removing b

$ hg status
R b

$ hg commit -m "Dummy merge -- eliminate b"
committed changeset 3:c163151f19df

$ ls
a  c

请注意,在这种情况下,您没有重写任何历史记录或创建任何新的存储库 - 如果 b 已被推送到集中存储库并被其他人拉取,则这一点尤其重要。

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 2017-02-22
    • 2014-05-08
    • 2020-11-06
    • 1970-01-01
    • 2020-01-21
    • 2010-12-05
    相关资源
    最近更新 更多