1. ホーム
  2. merge

[解決済み】Mercurialでフィーチャーブランチを正しくクローズするには?

2022-04-03 23:22:54

質問

フィーチャーブランチでの作業を終了しました feature-x . 結果をマージして default ブランチをクローズし feature-x の出力から取り除くためです。 hg branches .

次のようなシナリオを思いついたのですが、いくつか問題があります。

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

そのため feature-x ブランチ(changests 40 - 41 )は閉じていますが、そこには 1つの新しい頭 の場合、終了ブランチのチェンジセット 44 にリストアップされます。 hg heads を毎回使用します。

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

更新情報 : バージョン1.5以降、Mercurialは閉じたブランチの先頭を hg heads は、もうありません。

マージされたブランチを、もう一つ頭を残さずに閉じることは可能でしょうか?機能ブランチを閉じるのに、もっと正しい方法はありますか?

関連する質問

解決方法は?

1つの方法は、マージされたフィーチャーブランチを開いたまま(そして非アクティブのまま)にしておくことです。

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

もうひとつの方法は、追加コミットを使ってマージする前に機能ブランチをクローズすることです。

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

最初のものはよりシンプルですが、未解決のブランチが残ります。2番目の方法は、未解決のヘッドやブランチを残しませんが、補助的なコミットがもうひとつ必要になります。feature ブランチへの最後の実際のコミットと、この追加コミットを組み合わせるには --close-branch しかし、どのコミットが最後のコミットになるかを事前に知っておく必要があります。

更新 : Mercurial 1.5 以降、ブランチはいつでも閉じることができます。 hg brancheshg heads を使用するようになりました。ただ、技術的には、リビジョングラフには、子プロセスのないリビジョンがまだ1つ残っていることが、あなたを悩ませるかもしれません。

アップデート2 : Mercurial 1.8 以降 ブックマーク は Mercurial の中核となる機能です。ブックマークは、名前付きブランチよりもブランチングの際に便利です。この質問もご覧ください。