回答:
stiging
ブランチを更新して、そこから新しいブランチを作成します。次に、古いブランチを閉じます。
要約すれば:
hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch
--force
。次に例を示しますhg branch --force v3
。これにより、必要にhg update v3
応じて新しいv3
ブランチに更新されます。
stiging
分岐する前に閉じると、「ルーズエンド」にならない
将来の読者のために:rebase
拡張機能を使用すると、次のように、同じ親を持つ新しいブランチを作成し、stiging
ブランチ履歴全体をそのブランチに移動できます。
hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging
これは、stiging
親が1人だけであることを前提としています。もちろん、代わりに明示的なリビジョン番号を使用することもできます。
注1:ブランチstiging
に他のブランチとのマージが含まれている場合、同じ親を持つ限り、ブランチが保持されると思います。しかし、私は確かに再確認します。staging
stiging
注2:これにより履歴が編集されるため、古いブランチは複製されたリポジトリから単に消えるだけではありません(rebase
ドキュメントを参照)。誰もが新たにクローンを作成できない限り、大規模なグループにとってはあまり実用的なソリューションではないかもしれません。
Note3 / Edit(@JasonRCoombsの好意による):フェーズはmercurialの標準でrebase
あるため、すでにプッシュされた変更セットの変更は拒否されます。フェーズをドラフトに戻して(を使用してhg phases
)だますか、古いブランチをそのままにし、適切な名前のコピーを作成します(たとえば、「hg rebase --keep」を使用)。
hg convert
代わりに使用してください。
--keep
にするか、変更を移動する代わりにコピーするrebaseコマンドに渡します。
abort: can't rebase immutable changeset 11b1e2b7dc4f
。別のブランチのチェンジセットをこのブランチに移植したことに注意してください。その上、分割とマージは無料です。
.
て--dest
値に使用すると、リベースが自動的に新しいブランチ名を引き継ぎます。
これは履歴を変更し、Mercurialの上級ユーザー向けです。意味がわからない場合は、これを行わないでください。
スティグがローカルのみの場合は、グラフトとストリップを組み合わせたステージングに変更できます。まず、スティグが分岐した先祖のチェンジセットに更新します。ステージングブランチを作成し、各コミットをステージングからステージングに移植します。ステージングは今やスティグのコピーであるべきです。最後に、最初のコミットを取り除いてスティグを破棄します。
hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch
hg graft {first changeset in stiging}..{stiging head}