あなたの例の状況を参照して、私がやることは次のとおりです(Ry4anの戦略に従って、現在取り組んでいることをコミットするだけで、まだ公開したくない):
次のようなリポジトリで作業を開始するとします。
$ hg status -A
C f1
C f2
$ hg glog
@ changeset: 1:7f3c6c86a92f
| tag: tip
| summary: add f2
|
o changeset: 0:03ca1e6d5b86
summary: initial
つまり、2 つのファイルと 2 つのコミット/変更セットがあります。いくつかの作業を行い、たとえば新しい機能を追加すると、作業コピーは次のようになります。
$ hg status
M f2
? f3
? f4
2 つの新しいファイルと 1 つの変更されたファイルがあります。ここで、バグを修正する必要があります。そのために、リモート リポジトリに新しい変更も必要です。現在の作業をコミットしてスナップショットを作成し、リモートの変更をプルします (実行する順序は重要ではありません。デフォルトでは、プルは作業コピーの状態には影響しません)。
$ hg commit -A -m "snapshot feature work"
$ hg pull
これにより、次のような履歴が表示される場合があります。
o changeset: 3:2284ba62de07 <-- just pulled in
| tag: tip
| parent: 1:7f3c6c86a92f
| summary: edit f1
|
| @ changeset: 2:4a19d371a04f <-- your interrupted work
|/ summary: snapshot feature work
|
o changeset: 1:7f3c6c86a92f
| summary: add f2
|
o changeset: 0:03ca1e6d5b86
summary: initial
これで、リビジョン 3 に更新/チェックアウトして、バグの修正を開始できます。
$ hg update 3
.. fix the bug ..
$ hg commit -m "fix a bug"
$ hg glog --limit 3
@ changeset: 4:5d3d947fb4af
| tag: tip
| summary: fix a bug
|
o changeset: 3:2284ba62de07
| parent: 1:7f3c6c86a92f
| summary: edit f1
|
| o changeset: 2:4a19d371a04f
|/ summary: snapshot feature work
:
よさそうです。中間作業を公開せずに、修正をプッシュしましょう。つまり、ライブにしましょう。
$ hg push -r 4
これにより、リビジョン 4、バグ修正につながるすべての変更がプッシュされますが、ローカル リポジトリには他のブランチはプッシュされません。-r .
作業コピーの親リビジョン、つまりコミットしたばかりのリビジョンを参照する を使用することもできます。
最後に、機能の作業に戻って作業を続けることができます。
$ hg update 2
.. work, commit, work, commit ..
.. finally merge with the other branch, e.g. revision 4
これらの手順はコマンド ライン上にありますが、一般的な概念を Eclipse Mercurial プラグインの対応するクリックに適応させることは難しくないと思います。
いくつかの追加メモ:
- リビジョン ID や番号を操作する必要がないように、スナップショット コミットをブックマークすることもできます。
- 機能の作業を後で 1 回のコミットで公開したい場合は、完了したら折りたたみ拡張機能を使用してください。