Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hgbook.pdf
Скачиваний:
50
Добавлен:
17.03.2015
Размер:
3.15 Mб
Скачать

Поиск и исправление ваших ошибок

$ echo oops > oops $ hg add oops

$ hg status oops

A oops

$ hg revert oops $ hg status

? oops

Аналогично, если Вы применили к файлу hg remove, то можете с помощью hg revert восстановить его с предыдущим содержимым.

$ hg remove file $ hg status

R file

$ hg revert file $ hg status

$ ls file file

Это также сработает если файл был удалён «в ручную», без помощи Mercurial (Напомним, что в терминологии

Mercurial такие файлы называются «missing»).

$ rm file $ hg status

! file

$ hg revert file $ ls file

file

Если вы откатываете операцию hg copy, целевой (скопированный) файл все равно остается в вашей рабочей директории, однако изменения в нем не отслеживаются. Поскольку операция копирования в любом случае не затрагивает исходный файл, Mercurial никак не изменяет исходный файл.

$ hg copy file new-file $ hg revert new-file

$ hg status

? new-file

9.3. Работа с зафиксированными изменениями

Рассмотрим случай, когда вы зафиксировали изменение a и другое изменение b поверх него. Затем вы обнаружили, что изменение a было некорректным. Mercurial позволяет вам автоматически «вернуть» (back out) изменение целиком, и создаёт блоки, которые позволяют вам отменить часть изменения вручную.

Перед прочтением этой части руководства, вы должны четко представлять себе следующее: команда hg backout отменяет изменения добавляя новые записи к истории, но ни в коем случае не редактируя и не удаляя уже существующую в истории информацию. Эта утилита хорошо подходит для исправления небольших багов, но не для отмены больших изменений, приведших к серьезным проблемам. Чтобы разобраться с такими проблемами, смотрите секцию Раздел 9.4, «Изменения, которых быть не должно».

9.3.1. Отзыв набора измений

Команда hg backout позволяет вам автоматически «отменить» всю ревизию. Т.к. Меркуриал не позволяет изменять уже существующую историю, а только лишь добавлять в неё новые записи, данная команда не может просто удалить ревизию, которую вы хотите отменить. Вместо этого она создает новую ревизию, которая отражает состояние репозитория, если бы в него не была добавлена удаляемая ревизия.

Действия выполняемые командой hg backout на первый взгляд могут показаться несколько запутанными, поэтому продемонстрируем их на примере. Для начала создадим репозиторий с несколькими простыми изменениями.

$ hg init myrepo $ cd myrepo

$ echo first change >> myfile $ hg add myfile

$ hg commit -m 'first change' $ echo second change >> myfile

93

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]