Mercurial 有没有其他方法可以移除多个磁头?
假设我有这个:Mercurial 有没有其他方法可以移除多个磁头?,mercurial,Mercurial,假设我有这个: 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 现在,由于最后一次提交,我将有多个头部。例如,如果我想保留最后一个头部,即由commitc创建的头部(实际上放弃了b,以及在第一个头部之后进行的所有其他提交),我该怎么做?我使用了mq的strip命令,我能够实现我想要的,但我想知道是否还有其他
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
现在,由于最后一次提交,我将有多个头部。例如,如果我想保留最后一个头部,即由commit
c
创建的头部(实际上放弃了b,以及在第一个头部之后进行的所有其他提交),我该怎么做?我使用了mq的strip
命令,我能够实现我想要的,但我想知道是否还有其他方法。是的,还有其他方法。从上面的示例来看,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
但指定一个修订版,则它将只克隆该修订版及其祖先版本。因此,如果您的回购协议目录为TwoHeadMightBeBetter,您可以转到其父目录并发布:
hg clone TwoHeadsMightNotBeBetter OneHeadIsFine -r 925573c7103c
我在其中指定了变更集id,但您也可以使用-r2
,或者甚至-r-tip
,因为它当前是该回购的提示。现在,当您进入新克隆并执行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
,以提取特定分支。您还可以对包含b
的变更集执行虚拟合并(本例中为变更集1):
请注意,在这种情况下,您没有重写任何历史记录或创建任何新的回购——如果
b
已经被推到集中回购并被其他人拉走,这一点尤为重要。我想没有断头台
命令?我认为它已被弃用:)hg strip
正适合该任务。不过,Joel建议的hg clone-r…也很完美。您必须决定是要清理现有克隆还是要清理新克隆。或者在克隆时多次指定-r
,或者使用revset。
$ 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