参考您的示例情况,这就是我要做的(遵循 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 或编号。
- 如果您想稍后在单个提交中发布您的功能工作,请在完成后使用折叠扩展。