リポジトリに詳細な履歴を保持したいが、「合理的な」リビジョンセットのみを含む理想的な履歴を作成したい(そしてエクスポートできるようにしたい)のですよね?お見舞い申し上げます。
解決策1:タグを使用して履歴内の興味深いポイントをマークし、それらの間のすべての厄介なビットを無視することを学びます。
解決策2: 2つのブランチを使用してマージします。ブランチで開発をdefault行い、並列ブランチを維持しますrelease。(あなたはそれを呼ぶことができますcleanが、実際にはあなたはリリースを管理しています)。チェックポイントを設定する安定した状態にあるときはいつでも、ブランチにdefault切り替えて、必要に応じて、現在の-の状態をバッチでマージします。に直接コミットしない場合は、マージの競合は発生しません。releasedefaultrelease
(original branch) --o--o--o--o--o--o--o (default)
\ \ \
r ... ... --r--------r (release)
結果:の任意のリビジョンに更新してrelease、機能状態を期待できます。実行するhg log -r releaseと、選択したチェックポイントのみが表示されます。ログ全体を調べて、すべてがどのように発生したかを確認できます。欠点:releaseブランチはに依存しているため、ブランチdefaultを持ってこない限り、別のリポジトリにプッシュすることはできませんdefault。またhg glog -r release、マージが繰り返されるため、奇妙に見えます。
解決策3:上記のように名前付きブランチを使用しますがrebase、マージする代わりに拡張機能を使用します。リベースされたチェンジセットを完全に移動するのではなく、コピーするオプションがあります。--collapseまた、一連のリビジョンを1つのリビジョンに変換するオプションがあります。r1:tipファイナライズする一連のリビジョンがある場合は、次のようにからにコピーします。defaultrelease
hg rebase --source r1 --dest release --keep --collapse
これにより、その先頭にある1つのリビジョンが、releaser1からの先頭へのチェンジセット全体に相当しdefaultます。この--keepオプションは、破壊的な書き換えではなく、コピーにします。利点は、releaseブランチが希望どおりに表示されることです。きれいできれいであり、デフォルトのブランチをドラッグせずにプッシュできます。欠点は、そのステージをのリビジョンに関連付けることができないことです。したがって、中間リビジョンdefaultを本当に非表示にする必要がない限り、方法2をお勧めします。(また、リベースは「ソース」リビジョンのすべての子孫を移動/コピーするため、複数のバッチで履歴を潰すのは簡単ではありません。)
これらはすべて、追加の作業を行う必要があります。Mercurialには、どのレブセットを押しつぶしたいかを知る方法がないため、これは避けられません。