Ответ 1
Все эти команды взяты из самого Mercurial, и для них есть много хороших сравнений/контрастов. Однако здесь они кратко:
-
rollback
: одноуровневое отмена. Отменит последнее нажатие или фиксация (может быть опасным) -
backout
: создать новый коммит, который является обратным для данного фиксации. Эффект Net - это отмена, но изменение остается в вашей истории. -
strip
: удалить (destroy) изменения из истории. Удаление набора изменений также удаляет все его дочерние элементы, поэтому его можно использовать только для обрезки истории, а не для удаления фрагмента.
Все три очень хорошо описаны здесь: http://www.selenic.com/mercurial/hg.1.html
На ваш вопрос 2 вы можете использовать strip
, чтобы удалить последнюю фиксацию, и она не изменит ваши рабочие каталоги.
На ваш вопрос 3 вы можете легко внести изменения в другую часть этого проекта:
hg commit -m 'commit your half done work'
hg update OLDERCHANGESET # your working directory now is without the half-done-work
.. do that quickfix ...
hg commit -m 'quickfix'
hg push tip # this pushes the tip revision (latest) and its ancestors, but the half-don't work isn't an ancestor so it doesn't get pushed
hg update HALFDONEWORK # you can find the right revision number using "hg heads"
Это называется "анонимной веткой", и это очень распространенный способ работы. Вы завершаете функцию полузаполнения, но можете возобновить ее позже, и вам не нужно ее выталкивать.
Это отличное объяснение анонимных ветвей: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-anonymously