2010-03-24 2 views
51

Я только начинаю с Mercurial, и я сталкивался с чем-то, чего не понимаю.Разница между Revert и Update в Mercurial

Я внес изменения в несколько файлов, и теперь я хочу отменить все изменения, внесенные мной в один из них (например, вернуться к моему последнему фиксации для одного конкретного файла).

Насколько я могу видеть, мне нужна команда revert.

На странице я связан, есть следующее утверждение:

Эта операция, однако не изменяет родительскую ревизию рабочего каталога (или ревизии в случае незавершенных слияния). Чтобы отменить uncomitted merge, вы можете использовать «hg update -C -r». который сбрасывает родителей первому родителю.

Я не понимаю разницу между двумя (hg revert VS. hg update -C -r). Может ли кто-нибудь просветить меня относительно разницы? И в моем случае, действительно ли я хочу, чтобы реверс или обновление избавились от изменений, внесенных мной в файл?

+0

Чтобы понять разницу, вы должны попробовать с помощью 'revert -r', затем использовать статус hg, вы увидите разницу :) – tonfa

ответ

63

Первое отличие заключается в том, что возврат может работать над подмножеством рабочей копии, а обновление работает на всей рабочей копии. другая разница в том, что происходит, когда вы хотите вернуться к другой версии, отличной от последней.

если мы ревизии (колпачки поручены, нижний регистр изменения в рабочей копии, родительский пересмотр C)

A-B-C-d 

update -C -r B даст вам

A-B-C 

с набором рабочей копии к B любые изменения приведут к разветвлению от B (исходная ревизия установлена ​​на B)

A-B-C 
    \e 

revert -r B даст вам

A-B-C-b' 

где Ь «представляет собой набор изменений, который уничтожает все в промежуточных совершенных изменениях, в этом случае он отменяет все C. любых изменений теперь просто присоединиться к Ь» набора (родительский пересмотра оставлен без изменений при C)

+6

Ваше объяснение того, как вернуть/обновить версию, кроме последнее превосходно. Позвольте мне добавить, что предложение в помощи, в котором упоминалось это различие, - «не изменяет родительскую ревизию рабочего каталога». В примерах jk «родительская ревизия рабочего каталога» начинается с C. С обновлением она заканчивается как B, а с возвратом она все еще C («не изменяется»). В любом случае его можно просмотреть с помощью «hg parents». Кроме того, из этого возвращается «реверт может работать на подмножество рабочей копии» - это только один рабочий родительский родитель, и все файлы обмениваются им. –

+0

хорошая точка, добавленная версия родительской версии в каждой точке –

+0

Прохладный, отличный ответ на часто задаваемый вопрос. –

Смежные вопросы