hg revert
действительно решает эту проблему. Но я думаю, что вас смущает более широкий круг вопросов, чем просто ответ на ваш вопрос, и вы хотите попытаться ответить более полно.
hg update
- это целая команда хранилища, которая не будет работать с отдельными файлами. Это не похоже на Subversion svn update
. Если вы сделаете hg --help update
, вы увидите, что это так, потому что команда не принимает аргумент файла. Его можно использовать для перемещения всего хранилища в определенный моментальный снимок, но его нельзя использовать для всего одного файла.
Если вы наберете hg --help
, вы увидите список команд. Это довольно большой и несколько пугающий список, но если вы прочитаете его, вы найдете следующую строку:
revert restore individual files or directories to an earlier state
Теперь, если вам просто нужно последнее состояние для сравнения, есть другая команда, которая может вас заинтересовать, и это hg cat
. Это позволит вам распечатать содержимое файла в любой конкретной ревизии. Затем вы можете перенаправить его вывод в другой файл. Затем вы можете сравнить предыдущую известную хорошую версию вашего файла и старую версию для сравнения.
Причина, по которой Mercurial имеет отдельную команду update
, заключается в том, что в Mercurial можно сделать что-то, что невозможно в Subversion. Вы можете update
перейти к более ранней версии, внести изменения, а затем зафиксировать. Это создаст ветку. Команда update
также позволяет изменить родительскую версию текущего рабочего каталога, а также изменить содержимое всех файлов в этом каталоге на версии родительской версии.
Это означает, что revert
изменяет содержимое файла (или даже весь репозиторий, если вы даете команде правильные аргументы), но оставляет исходную версию текущей рабочей копии такой же.
Вы можете узнать родительскую ревизию (или ревизии в случае слияния) текущей рабочей копии с помощью команды hg parents
.
В Subversion ревизии являются строго линейной прогрессией. Mercurial создает ветви по капле, и их почти так же легко объединить. Редакции образуют DAG, а не строго линейную последовательность.