Подтвердить что ты не робот

Как вы вернете 1 или более преданных файлов в mercurial, но НЕ весь набор изменений

Скажем, у меня есть файлы File_A, File_B и File_C. Я редактирую File_A и File_B специально, но File_C Я просто добавил код отладки, который я не планирую совершать. Затем, случайно, я делаю

hg commit -m "comment"

Как просто вернуть/откат/резервное копирование File_C? В принципе, я был бы счастлив, если бы смог пойти

hg update -r <oneRevBack> File_C
hg commit -m "put C back"

но обновление не принимает фильтр AFAIK, поэтому он также вернется к File_A и File_B. Я могу скопировать File_C где-нибудь, hg update, а затем скопировать его, но это кажется хромым. Есть ли способ сделать это прямо в Mercurial?

4b9b3361

Ответ 1

Точная команда, которую вы хотели использовать, сработала бы, если бы вы использовали hg revert вместо hg update

hg revert -r .^ File_C
hg commit -m "put C back"

Ответ 2

В большинстве случаев решение VonC просто идеально. Однако, если откат не является вариантом (например, потому что рассматриваемая сделка не является последней или потому, что вы выполняли сложную частичную фиксацию), вы можете сделать новый коммит с измененным разбросом нежелательных изменений на File_C:

hg diff -c REVISION --reverse File_C | hg import -m "Revert changes to File_C" -

Где REVISION относится к фиксации, где File_C было совершено случайно. Первая команда создает обратный diff для рассматриваемого файла. Выходной сигнал подается на hg import (не забывайте о конце -).

UPDATE: Вы также можете использовать команду резервного копирования:

hg backout -I File_C REVISION
hg commit -m "Revert changes of File_C in REVISION" File_C

Команда резервного копирования изменяет вашу рабочую копию тем, что она отменяет изменения в File_C, зарегистрированные в rev. REVISION. Впоследствии возврат выполняется явно.

Ответ 3

Вы можете использовать hg rollback, чтобы отменить последнее коммит, а затем повторить его снова, это без файла C.
(как упоминалось в Mercurial FAQ, а также в этом часто задаваемых вопросах где отмечено, что "нет резервной копии при откате транзакции", поэтому используйте ее с осторожностью)

Ответ 4

hg revert FILE -r REVISION

вы можете вернуть его для последнего фиксации через

hg revert FILE -r .~1

Ответ 5

Вы также можете использовать интерактивный режим:

hg revert -i -r .^

Выберите, что вы хотите отменить и подтвердите.

hg amend