2


0

Mercurial no-opマージで履歴を保持し、ブランチを閉じる

リビジョン107は、100-106からのすべての変更を誤ってマージしました

リビジョン108はhg revert --all -r 106であり、その後にhg commitが続きます。これはおそらく間違ったことです。すべての変更を行ったブランチをマージする代わりに、すべての変更を1つのチェンジセットに取り込んだからです。説明や履歴はありません。

A)そもそもブランチをマージするにはどうすればよいですか?

しかし、もっと重要なのは:

B)ブランチを今すぐマージするにはどうすればよいですか?

2 Answer


2


レポジトリをまだボックスの外にプッシュしていない場合は、簡単に修正できます。

   cd ..
   hg clone -r 106 current newcurrent
   cd newcurrent
   hg pull -r 97 ../current

現在、「newcurrent」は、107および108が発生する前の古いリポジトリとまったく同じように見えるリポジトリです。

これら2つをマージするには、次のようにします。

   hg update  # which gets you to tip
   hg merge   # which merges in the other head and forces you to make choices

107を作成する際に何が間違っていたかは明らかではないため、実際に変更を提案する方法はわかりませんが、それは単純にマージする必要があります。 1つのブランチのすべての変更を誤って削除するのは、http://mercurial.selenic.com/wiki/TipsAndTricks#Keep_.22My.22_or_.22Their.22_files_when_doing_a_merge [hard]でした。


1


可能な限り、リポジトリをバックアップして、安全に実験できるようにします。

このコマンドは最後のトランザクションを取り消します:

hg rollback -h

このコマンドは、マージを取り消して元に戻すのに役立つ場合があります。

hg backout -h

このコマンドは、リポジトリに影響を与えることなく、作業ディレクトリを以前の状態に復元します。

hg revert -h

それぞれの場合の-hオプションは、コマンドのヘルプを提供します。 コマンドを適用する準備ができたら、-hオプションを削除します。

私の最初の実験は次のとおりです。

hg rollback
hg merge -r 106

リビジョン107に戻り、変更セット95と96を含むヘッドが正常にマージされたように見えます。その後、変更セット97、100〜106を含むヘッドをマージします。