ローカルの Mercurial リポジトリからプッシュできる発信チェンジセットが 5 つあり、現時点ではそのうちの 1 つだけをプッシュしたいと考えています。この 1 つの変更セットは、利用可能なすべての変更セットの中間にあります。
たとえば、次のリビジョンがあります。
- 6639
- 6546
- 6545
- 6544
- 6543
これを行う簡単な方法はありますか?
ローカルの Mercurial リポジトリからプッシュできる発信チェンジセットが 5 つあり、現時点ではそのうちの 1 つだけをプッシュしたいと考えています。この 1 つの変更セットは、利用可能なすべての変更セットの中間にあります。
たとえば、次のリビジョンがあります。
これを行う簡単な方法はありますか?
変更セットの連続したリストは、必要な数までしかプッシュできません。
そう
hg push -r 6545
押し6543..6545
ます。
6545
また、前の変更セットがないとその変更が意味をなさないという理由だけでプッシュすることはできません。
Mercurial Queues拡張機能を使用してこれを行うことができます。リンクされたページで詳しく説明されている mq 拡張機能を有効にする必要がある場合があります。
すべてのリビジョンをキューにインポートし、それらをすべてスタックからポップしてから、プッシュしてから残りを適用する前に、必要なものを適用します。このようなもの:
> hg qimport --rev 6639
> hg qimport --rev 6543:6546
> hg qpop --all
> hg qpush --move 6545.diff
Here you might have to resolve conflicts
> hg qfinish --applied
> hg push
> hg qpush --all
Again, might need to resolve conflicts here.
これにより、リビジョン6545
が適用されてプッシュされた (ただし、現在は別のリビジョン番号になっている) リポジトリが残り、残りの変更は適用され、プッシュされていません。
あなたが望むことは不可能です。リビジョンはリポジトリを明確な状態にする必要がありますが、6545をプッシュしてリモートリポジトリをそれに更新できる場合、以前の(プッシュされていない)リビジョンセットからの変更は含まれません。これは、水銀のコアデザインに反します。あなたができることは次のとおりです。
a)rev 6545と同じ変更を含むdiff(パッチ)を配布します。これは、hg diff
または他の方法で行うことができますが、パッチの適用は、本質的にrev6545に接続されていません。同じ変更を加えます。運が良ければ、将来問題なくマージできます。または
b)履歴を一時的に(mq拡張機能を使用して)または永続的に(ヘルプrebase
または他の拡張機能を使用して)書き換えて、6545がすでにコミットされたリビジョンの直後に配置されるようにします。その後、祖先がすでにプッシュされている他のリビジョンと同じようにプッシュできます。