Все эти команды взяты из самого Mercurial, и для них есть много хороших постов сравнения / контраста. Однако вот они вкратце:
rollback
: отмена одного уровня. Отменяет последнее нажатие или коммит ( может быть опасно )
backout
: создать новый коммит, обратный данному коммиту. Чистый эффект отменяется, но изменения остаются в вашей истории.
strip
: удалить ( уничтожить ) изменения из истории. Удаление набора изменений также удаляет все его дочерние элементы, поэтому его можно использовать только для усечения истории, но не для удаления фрагмента.
Все три очень хорошо описаны здесь: 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