Svn - вернуться к старой фиксации в другой ветке

Я работаю над проектом, использующим svn. Я проверяю его последнюю версию в каталоге (используя svn checkout http://url /path/to/dest). Я сделал некоторые модификации, поэтому я svn add измененные файлы, а затем svn commit изменения.

К сожалению, я внес изменения не в ту ветку. Прямо сейчас я пытаюсь выполнить svn update для конкретной фиксации в другой ветке, используя svn update -r 1234, и я получаю следующее сообщение об ошибке:

svn: E160005: Target path '/dev/branches/project' does not exist

Я переключился на правильную ветку с svn switch http://url, но все еще получаю то же сообщение об ошибке. Как я могу правильно вернуться к этой фиксации?


97
1

Ответ:

Я думаю, у вашего подхода есть несколько проблем.

Во-первых, изменения, которые вы фиксируете в Subversion, - это необратимый¹,, поэтому первое, что вы должны сделать, это фактически «отменить» эффекты неправильной фиксации.

Поскольку любую фиксацию можно рассматривать как «патч», который определяет, что и как изменить - по сравнению с состоянием репозитория, предшествующим фиксации, для отмены изменений, внесенных фиксацией, вы записываете другую фиксацию, которая имеет изменения, прямо противоположные изменениям в исходный коммит.

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

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

Здесь - вот как это делается.


¹ То есть от клиента. С помощью специализированных инструментов можно провести специальную операцию на физическом хранилище. Но я думаю, что это не то, что мы хотим здесь делать.