現在、「ステージング」がはるかに優れたセマンティックフィットであると思われる「スティグ」ブランチがあります。これを処理するための良い戦略は何ですか?
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
将来の読者向け: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
に他のブランチとのマージが含まれる場合、Ithinkstaging
とstiging
は同じ親を持っています。しかし、私は確かに再確認します。
注2:これは履歴を編集するため、古いブランチはクローンリポジトリから単純に消えません(rebase
ドキュメントを参照)。誰もが新たにクローンを作成できない限り、大規模なグループにとって非常に実用的なソリューションではないかもしれません。
注3 /編集(@JasonRCoombs提供): phases がMercurialの標準になったため、rebase
はすでにプッシュされた変更セットの変更を拒否します。フェーズをドラフトに戻す(hg phases
を使用)か、古いブランチをそのままにして、適切な名前のコピーを作成する(たとえば、 `hg rebase --keep 'を使用する)ことでそれを欺くことができます。
変更セットがある場合、ブランチマップで convert extension を使用して名前を変更する必要があります。誰もが新しいリポジトリのクローンを作成するか、古いブランチを削除する必要があります。
「ステージング」という新しいブランチを作成し、他のブランチを忘れます...
これにより履歴が変更され、上級Mercurialユーザーのみが使用できます。意味がわからない場合は、これをしないでください。
スティグがローカルのみの場合、 graft と strip の組み合わせでステージングに変更できます。スティグが分岐した先祖の変更セットに更新することから始めます。ステージングブランチを作成し、各コミットをスティグからステージングに移植します。ステージングはスティグのコピーになります。最後に、最初のコミットを削除してスティグを破壊します。
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