2011-07-28 13 views
1

はのは、私がこれを持っているとしましょう:最後のコミットので複数のヘッドを取り外す別の方法はありますか?

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コマンドで少し演奏しました。私が望むものを達成することができましたが、別の方法があるかどうかを知りたいと思います。

+0

「ギロチン」コマンドがあるとは思いませんか? – aroth

+0

私はそれが非難されていると思います:) – Senthess

+0

'hg strip'はそのタスクにはちょうど完璧です。しかし、Joelによって提案された 'hg clone -r ... 'も完璧です。既存の**クローンをクリーンアップしたいのか、クリーンな**新しい**クローンが必要なのかを決める必要があります。 –

答えて

2

はい、別の方法があります。上記のあなたの例から、hg glogの出力はビットのようになります。あなたがtestのクローンを作成するが、リビジョンを指定した場合

@ 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 

、それだけでそのリビジョンとその祖先のクローンを作成します。だからあなたのレポのディレクトリがTwoHeadsMightNotBeBetterであれば、あなたはその親ディレクトリと問題に行くことができます:

hg clone TwoHeadsMightNotBeBetter OneHeadIsFine -r 925573c7103c 

を私はその中でチェンジセットIDを指定したが、それは現在の先端であるので、あなたも代わり-r 2、あるいは-r tipを使用することができますそのレポあなたは3頭を持っていたし、2を維持したい場合は、それは少し違うだろう

@ 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 

:あなたは新しいクローンに入るとhg glogを行うときに今、あなただけの1頭を持っています。それらの1つを-rでクローンし、hg pull-rを指定して特定のブランチをプルする必要があります。

+1

を使用するか、クローン作成時に '-r'を複数回指定するか、revsetを使用してください。 –

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が既に中央リポジトリにプッシュされ、他の人が引っ張っていた場合は特に重要です。

関連する問題