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

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

$ hg commit -m 'second change'

В качестве единственного параметра команда hg backout принимает ID удаляемой ревизии. Обычно hg backout перебрасывает вас в текстовый редактор, где можно создать комментарий, объясняющий причину отмены изменений. В этом же примере мы добавили комментарий прямо в командной строке при помощи параметра -m.

9.3.2. Отзыв последней ревизии (tip)

Начнем с отзыва последней ревизии.

$ hg backout -m 'back out second change' tip reverting myfile

changeset 2:9c57b44505fe backs out changeset 1:37eb97592c2d $ cat myfile

first change

Как видите, в myfile второй строки уже нет. Взгляд на вывод команды hg log позволяет понять, что сделала hg backout.

$ hg log

--style compact

 

 

2[tip]

9c57b44505fe 2012-02-02 14:09 +0000 bos

 

back out second change

 

 

1

37eb97592c2d

2012-02-02

14:09 +0000

bos

 

second

change

 

 

 

0

b48ef65237ab

2012-02-02

14:09 +0000

bos

 

first change

 

 

 

 

 

 

 

 

 

Заметим, что новый набор изменений, который был создан командой hg backout является потомком отозванного набора. Это легко увидеть на рисунке Рисунок 9.1, «Отмена изменения используя команду hg backout», на котором показана история изменений в графическом виде. Как вы можете видеть, история изящная и прямолинейная.

Рисунок 9.1. Отмена изменения используя команду hg backout

9.3.3. Отзыв ревизии, не являющейся последней

Если Вы хотите отозвать не последний набор изменений добавляйте к hg backout опцию --merge.

$ cd ..

$ hg clone -r1 myrepo non-tip-repo adding changesets

94

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

adding manifests adding file changes

added 2 changesets with 2 changes to 1 files updating to branch default

1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd non-tip-repo

Это позволяет делать отзыв любой фиксации за одно действие, что обычно просто и быстро.

$ echo third change >> myfile $ hg commit -m 'third change'

$ hg backout --merge -m 'back out second change' 1 reverting myfile

created new head

changeset 3:5d235a7062b8 backs out changeset 1:37eb97592c2d merging with changeset 3:5d235a7062b8

merging myfile

0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit)

Если Вы посмотрите на содержимое myfile после завершения отзЫва, то увидите, что присутствует первый и третий набор изменений. А второй отсутствует. (Примечание переводчика: пример несколько некорректен, т.к. получается конфликтное слияние, о чем уже написано в комментариях в оригинальном руководстве.)

$ cat myfile first change third change

На графическом представлении истории (рисунок Рисунок 9.2, «Автоматический возврат не последнего набора изменений с помощью команды hg backout» ) видим, что в этой ситуации, Mercurial так же фиксирует только одно изменение (прямоугольники — это узлы, которые Mercurial коммитит автоматически), но граф ревизий выглядит иначе. Перед тем, как Mercurial начнёт процесс отзыва, он запомнит текущего родителя рабочей директории. Затем он отзывает указанную ревизию и фиксирует этот отзыв. И наконец, он выполняет слияние с предыдущим родителем рабочей директории, но заметьте, что результат слияния не фиксируется. Репозиторий в настоящее время содержит 2 головы, и рабочий каталог в состоянии слияния.

Рисунок 9.2. Автоматический возврат не последнего набора изменений с помощью команды hg backout

95

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