Как вы возвращаете 1 или более зафиксированных файлов в Mercurial, но НЕ весь набор изменений - PullRequest
27 голосов
/ 24 февраля 2011

Скажите, у меня есть файлы 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?

Ответы [ 4 ]

30 голосов
/ 24 февраля 2011

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

hg revert -r .^ File_C
hg commit -m "put C back"
7 голосов
/ 24 февраля 2011

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

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

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

ОБНОВЛЕНИЕ: Вы также можете использовать команду backout :

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

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

3 голосов
/ 24 февраля 2011

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

2 голосов
/ 06 сентября 2016
hg revert FILE -r REVISION

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

hg revert FILE -r .~1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...