В подвижном, как я применяю обратный патч к конкретному файлу?

Еще одно решение:

import sh
sh.rm(sh.glob('/path/to/folder/*'))
20
задан Community 23 May 2017 в 11:48
поделиться

3 ответа

Вы можете сделать это, используя только аргумент -I (включить имена, соответствующие заданным шаблонам) для возврата с одной строкой:

hg backout --merge -I thefiletorevert -m 'message' OFFENDINGREVISIONID

Пример сценария:

hg init testrepo
cd testrepo
echo -e "line1\n\nline3" > file1
echo -e "line1\n\nline3" > file2
hg commit -A -m 'changes to two files'
perl -pi -e 's/line1/line 1/' file1
perl -pi -e 's/line1/line 1/' file2
hg commit -m 'put spaces in line1'
perl -pi -e 's/line3/line 3/' file1
perl -pi -e 's/line3/line 3/' file2
hg commit -m 'put spaces in line3'
hg backout --merge -I file1 -m 'remove spaces from line1' 1

Пример вывода:

adding file1
adding file2
reverting file1
created new head
changeset 3:6d354f1ad4c5 backs out changeset 1:906bbeaca6a3
merging with changeset 3:6d354f1ad4c5
merging file1
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

Результирующее содержимое файла:

file1:line1
file1:line 3
file2:line 1
file2:line 3

обратите внимание, что в файле file1 отсутствует место в первой строке после отмены среднего набора изменений, а подробный журнал показывает только один файл, измененный в откате:

$ hg log -v -r tip
changeset:   3:6d354f1ad4c5
tag:         tip
parent:      1:906bbeaca6a3
user:        Ry4an Brase <ry4an@mini>
date:        Mon Sep 14 12:17:23 2009 -0500
files:       file1
description:
remove spaces from line1
23
ответ дан 30 November 2019 в 00:23
поделиться

Вот что я бы сделал: Используйте свежий клон ревизии верхушки.

hg backout --merge -r revision_where_the_change_happened

для слияния отменённых изменений в рабочую копию.

Теперь скопируйте рассматриваемый файл в свою обычную рабочую копию, зафиксируйте

hg commit -m "Reversed the changes to file.h made in revision bla"

и выбросьте клон, который вы создали выше.

Таким образом, mercurial не будет знать, что существует связь между revision_where_the_change_happened и этим коммитом. Если вы хотите, чтобы mercurial помнил об этом, вместо этого сделайте a

hg revert {all files except the one in question}

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

Я полагаю, что выбор способа зависит от того, насколько большой частью набора изменений было конкретное изменение файла.

6
ответ дан 30 November 2019 в 00:23
поделиться

Используйте команду revert.

hg revert -r1 file

Это должно вернуть содержимое файла к версии в ревизии 1. Затем вы можете отредактировать его и зафиксировать как обычно.

4
ответ дан 30 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: