web-dev-qa-db-ja.com

Mercurial:ブランチの名前を変更できますか?

現在、「ステージング」がはるかに優れたセマンティックフィットであると思われる「スティグ」ブランチがあります。これを処理するための良い戦略は何ですか?

201
KevDog

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
217
Elliot Cameron

将来の読者向け: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に他のブランチとのマージが含まれる場合、Ithinkstagingstigingは同じ親を持っています。しかし、私は確かに再確認します。

注2:これは履歴を編集するため、古いブランチはクローンリポジトリから単純に消えません(rebaseドキュメントを参照)。誰もが新たにクローンを作成できない限り、大規模なグループにとって非常に実用的なソリューションではないかもしれません。

注3 /編集(@JasonRCoombs提供): phases がMercurialの標準になったため、rebaseはすでにプッシュされた変更セットの変更を拒否します。フェーズをドラフトに戻す(hg phasesを使用)か、古いブランチをそのままにして、適切な名前のコピーを作成する(たとえば、 `hg rebase --keep 'を使用する)ことでそれを欺くことができます。

58
alexis

変更セットがある場合、ブランチマップで convert extension を使用して名前を変更する必要があります。誰もが新しいリポジトリのクローンを作成するか、古いブランチを削除する必要があります。

16
tghw

「ステージング」という新しいブランチを作成し、他のブランチを忘れます...

15
lctr30

これにより履歴が変更され、上級Mercurialユーザーのみが使用できます。意味がわからない場合は、これをしないでください。

スティグがローカルのみの場合、 graftstrip の組み合わせでステージングに変更できます。スティグが分岐した先祖の変更セットに更新することから始めます。ステージングブランチを作成し、各コミットをスティグからステージングに移植します。ステージングは​​スティグのコピーになります。最後に、最初のコミットを削除してスティグを破壊します。

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
4
AWrightIV