SVN обратное слияние?

Мой репозиторий SVN был совершенен в редакции 497. Я выполнил несколько плохих коммитов, так что теперь он находится в редакции HEAD. Я вижу, что для отката вам следует использовать такую ​​команду:

svn merge -r HEAD:497 .

в рабочем каталоге (и рабочий каталог находится в редакции HEAD). Но разве это правильная команда? Или я использую HEAD: 498? или 496? Я уже выполнил эту команду, и текущая версия не совпадает с 497, потому что когда я обновляю -r 497 (или когда у меня есть 497 рабочих копий и я обновляю -r HEAD), происходит множество обновлений файлов.

У меня есть какая-то проблема с fencepost, где HEAD: 497 действительно возвращается к 496 или что-то еще? Или это, когда я обновляюсь, SVN возвращается через каждую ревизию, несмотря на то, что HEAD и 497 идентичны?

Edit:

Просто, чтобы уточнить, как я сказал ранее, когда я обновляю между 497 и моим объединенным HEAD, я вижу, что происходит большое количество изменений файла. Я думал, что если 497 и HEAD будут идентичными, это обнаружит это, и никаких изменений файла не произойдет; он просто сказал бы: "Обновлено до версии 497." Так ошибочна моя команда или это неправильно? (и если да, то почему?)

Ответ 1

Если ваше репо было в первозданном состоянии при ревизии 497, тогда я думаю, что вы правы, вам нужно сделать:

svn merge -r HEAD:497 .

Эта команда объединения только изменит файлы в вашей рабочей копии, поэтому не забудьте также зафиксировать изменения для обновления HEAD в репо.

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

Ответ 2

Если вы хотите отменить r123, вам нужно svn merge -r 123:122 .

Это означает, что вам нужно запустить

svn merge -r HEAD:497 .

Чтобы проверить запуск:

svn diff -r 497

Ответ 5

Чтобы избежать нежелательного изменения (возможно, вы передали другие файлы, в которых были отладочные заявления, вместе с тем, что вы действительно хотели совершить), скажем, что неправильное изменение было -r10:

svn update
svn merge -r10:9 <URL of your repository base> .

Теперь вы можете вернуть только тот файл, который вы хотите совершить:

svn update
svn update -r10
svn commit <just that one file>   # this is the command you meant to type from the beginning

Ответ 6

Если вам нужен быстрый и надежный способ откат к определенной ревизии, просто проверьте прежнюю версию репозитория.

Запустите svn info, чтобы напомнить себе, что такое URL вашего репозитория, затем создайте новую папку и проверьте нужный вариант:

cd <your new folder>
svn checkout <URL> -r 497 .

Затем вы можете разделить эту папку с существующей папкой, и после этого вы можете скопировать всю эту ревизию обратно в репозиторий, если вам нужно.