Mercurialは、ヘッドではない名前付きブランチをマージできますか?
質問
基本的に、私はdevブランチを持っています。私がやりたいのは、何かを実装している間に機能ブランチを作成し、それをマージし直すことです。そのため、次のような状況が発生します
a
b
c
d - dev
/
e
f - feature
devは頭ではないので、devとfeatureの両方がfを指すようにdevをfeatureにすることは可能ですか?
gitはこれをうまく実行できると確信していますが、Mercurialに同じことをさせるとは思えません...
解決
Carl Meyerは正しい。あなたはgitユーザーとして考えているので、Mercurialは物事を異なる方法で処理します。
Carlが提案したことを実行して、次のコミットをdevブランチに強制することができます。 devブランチには不連続性があるため、個人的にはこれを見た方がややこしいと思います。
それを処理する方法は、機能ブランチをマージして戻すことです。 hg update dev&& hgマージ機能&& hg commit -m '完成した機能をマージします。'
これにより、次のようなグラフが表示されます。
a - dev
b - dev
c - dev
d - dev
/|
e | - feature
f | - feature
\|
g - dev
私にとって、これは何が起こったのかを明確に示しています。新しい機能のために分岐し、終了したらdevブランチにマージしました。その間にdevに他のコミットがなかったという事実は単なる偶然であり、ワークフローを変更する必要はありません。
他のヒント
hgの名前付きブランチ(gitとは異なり)は「ポイント」しません;どこでも。ブランチ名は、特定のリビジョンの可動エイリアスではありません。各コミットには、コミットが存在するブランチを示すメタデータマーカーがあります。それだけです。
この状況では、「d」から派生した個別のコミットがない場合、 devブランチで必要なことは、「hg branch dev」を実行することだけです。そして、" f"から派生した次のコミットはブランチdevに戻ります。探している結果が得られると思います。
編集:それは機能しますが、実際のマージを行うというSteve Loshの提案は、より賢明な履歴になります。