水銀の不良マージを修正します
-
27-10-2019 - |
質問
Mercurial Project構成には、単一のリポジトリに3つのブランチがあります。 1つは、緊急のバグ修正が行われる安定したリリースブランチ、1つは新機能コードを含む機能ブランチであり、1つはバグ修正と新機能の両方がマージされ、最新のコードベースを提供するUATブランチです。 。
まったく問題なく、大量の新機能コードをUATブランチに統合しました。その後、安定したブランチとバグの修正をUATブランチに統合しましたが、これは新機能コードを削除する効果があるようです。私は、この問題が、誰かがしばらく前に安定したものに統合することによって引き起こされたことを発見しました(これは決して起こらなかったはずです!!)。バグの修正をUATにマージしようとすると、すべての新機能コードが削除されます。
この「悪いマージ」の後に子孫であるバグの修正をまだ保持しながら、UATからuatから安定性への影響を削除する方法はありますか?マージをバックアウトしようとしましたが、まったく効果がないようです。ストリップを実行して、必要な変更セットを再度添付できますか?
前もって感謝します。
解決
私は実際に、少しの試行錯誤でこれを自分で修正することができました。
まず、mercurial.iniファイルで移植とmqmergeの拡張機能を有効にする必要があります。拡張ヘッダーの下に次の行を追加します
transplant=
mq=
リポジトリを新しい場所にクローンします。新しいリポジトリでは、ストリップコマンドを使用して履歴をクリアして、バッドマージを削除して、不良マージの効果が削除されます。 (これがすべての子孫の変更セットを削除することに注意してください)
次に、以下に似たコマンドを使用して、他のリポジトリから年代順に必要なすべての変更セットをチェリーピックする必要があります
hg transplant -s "otherRepo" -b "branchName" "changesetHexNumber"
必要なすべての変更セットについて、移植コマンドを繰り返します。ウイラ!
NB:中央リポジトリを使用している場合は、そこに問題のあるマージ/チャンセットを剥がす必要があります。