Еще одно решение:
import sh
sh.rm(sh.glob('/path/to/folder/*'))
Вы можете сделать это, используя только аргумент -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
Вот что я бы сделал: Используйте свежий клон ревизии верхушки.
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-коммит.
Я полагаю, что выбор способа зависит от того, насколько большой частью набора изменений было конкретное изменение файла.
Используйте команду revert.
hg revert -r1 file
Это должно вернуть содержимое файла к версии в ревизии 1. Затем вы можете отредактировать его и зафиксировать как обычно.