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

Отмена определенных изменений в Subversion

Предположим, что у меня есть набор коммитов в папке репозитория...

123 (250 new files, 137 changed files, 14 deleted files)
122 (150 changed files)
121 (renamed folder)
120 (90 changed files)
119 (115 changed files, 14 deleted files, 12 added files)
118 (113 changed files)
117 (10 changed files)

Я хочу получить рабочую копию, которая включает все изменения из ревизии 117, но НЕ включает изменения для ревизий 118 и 120.

РЕДАКТ. Чтобы сделать проблему более ясной, я хочу отменить изменения, сделанные в 118 и 120, сохраняя при этом все другие изменения. Папка содержит тысячи файлов в сотнях подпапок.

Каков наилучший способ достичь этого?

Ответ, благодаря Бруно и Берт, - это команда (в этом случае для удаления 120 после выполнения полного слияния)

svn merge -c -120 .

Обратите внимание, что номер версии должен быть указан с минусом. '-120' не '120'

4b9b3361

Ответ 1

Чтобы отменить изменения 118 и 120:

svn up -r HEAD       # get latest revision
svn merge -c -120 .  # undo revision 120
svn merge -c -118 .  # undo revision 118
svn commit           # after solving problems (if any)

Также см. описание в Отмена изменений.

Обратите внимание на минус в аргументе -c -120. Переключатель -c (или --change) поддерживается, поскольку Subversion 1.4, более старые версии могут использовать -r 120:119.

Ответ 2

Там более простой способ, если вы используете TortoiseSVN, клиент Windows для Subversion. Вы просто щелкните, чтобы просмотреть журнал в обновленной рабочей копии, выберите изменения, которые хотите отменить, щелкните правой кнопкой мыши и выберите "Отменить изменения от этих изменений".

Это безопасная операция, потому что изменения применяются только в вашем рабочем пространстве. Вам по-прежнему необходимо зафиксировать свой репозиторий.

Это одна из лучших особенностей TortoiseSVN. Я всегда был парнем из командной строки, но Черепаха передумала.

Ответ 3

Я полагаю, вы могли бы создать ветку из ревизии 117, а затем объединить все, кроме 118 и 120.

svn copy -r 117 source destination

Затем проверьте эту ветку и оттуда выполните svnmerge.py merge -r119,120-123

РЕДАКТИРОВАТЬ: Это не отменяет изменения в ветке/туловище. Вместо этого используйте svn merge.