Со ссылкой на ваш пример ситуации, вот что я бы сделал (следуя стратегии 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.
Некоторые дополнительные заметки:
- Возможно, вы захотите добавить в закладки вашу фиксацию моментального снимка, поэтому вам не нужно работать с идентификаторами или номерами ревизий.
- Если вы хотите опубликовать свою функциональность позже в одном коммите, используйте расширение collapse , как только закончите.