Я случайно отправил слишком много файлов в репозиторий SVN и изменил некоторые вещи, которые я не хотел. (Вздох.) Чтобы вернуть их в прежнее состояние, лучшее, что я мог придумать, было
svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
Jeez! Нет лучшего способа? Почему я не могу просто написать что-то вроде этого:
svn revert -r 854 l3toks.dtx
Хорошо, я использую только v1.4.4, но я просмотрел список изменений для ветки 1.5, и я не смог увидеть ничего, что напрямую связано с этим. Я что-то пропустил?
Изменить: я думаю, я не был достаточно ясен. Я не думаю, что хочу отменить слияние, потому что тогда я потеряю изменения, которые я действительно хотел сделать! Скажите, что fileA
и fileB
оба были изменены, но я только хотел совершить fileA
; случайно набрав
svn commit -m "small change"
фиксирует оба файла, и теперь я хочу откатиться fileB
. Обратное слияние делает эту задачу не легче (насколько я могу судить), чем шаги, которые я описал выше.
Ответы:
или
Две команды эквивалентны .
источник
svn merge -c -854 my.file
, а затем делаюsvn diff
, то, кажется, показывает одну ревизию до 854 (то есть 853 ); только когда я делаюsvm merge -c 854 myfile
(без-
), похоже, что myfile возвращается к rev 854. Еще раз спасибо, ура!Ознакомьтесь с разделом " Отмена изменений " в svn book
источник
извините, что потратил немного места на повторение ранее данного ответа - но это то, с чем я всегда сталкиваюсь.
Допустим, я обновил локальные файлы до последней ревизии, которой является 854. Затем я хотел бы получить более старую ревизию - версию файла из нескольких ревизий ранее, скажем, ревизии 851.
Скопировать будет работать:
... однако, я не могу быть обеспокоен поиском URL репо :)
Обновление вроде бы может сработать:
... однако, он также помечает локальную копию как «только что извлеченную» или, скорее, «такую же, как онлайн-ревизия» (т. е. в Tortoise / RabbitVCS вы получаете зеленую галочку «ОК»), что означает, что вы не можете сделать это
svn ci -m "rolled back to r 851"
: просто потому, что локальнаяsubversion
Исполняемый файл не заметит каких-либо локальных изменений и не будет загружать что-либо в онлайн-хранилище.И, как уже было сказано, обратное слияние работает, но в этом случае не следует полагаться на синтаксис ярлыков; но конкретно заявляю:
Я должен признать - я бы никогда не понял, что предложение « Обратное слияние r854 - r852 в файл » означает « Просто получил r851 вашего файла и перезаписал все, что у вас ранее было локально - и оно помечено как отличающееся от последней онлайн-ревизии, поэтому Вы можете проверить это онлайн, как новую версию «отката» « », но я думаю (и надеюсь :)), именно это и делает :)
После этого можно использовать
svn diff
для быстрой проверки, вернули ли мы правильную ревизию локально; а также файл будет помечен красным восклицательным знаком в Tortoise / RabbitVCS (то есть отличается от последней зафиксированной версии), и такsvn ci -m "rolled back to r 851"
может быть запущен на этот раз.Также обратите внимание, что если вы, наконец, передумали после обратного слияния ( то есть вы все равно хотите продолжить работу над последней версией HEAD, здесь 854 - после того, как вы откатились до 851 локально, но еще не совершили откат ), вы не должны использовать
svn up
, потому что он просто скажет, что он уже " На ревизии 854 "; использовать вместоsvn revert --recursive .
или аналогичный ...Ура!
Ссылка: Как откатить изменения с помощью Subversion - Джейкоб Райт - Flex, AIR, PHP и т. Д.
РЕДАКТИРОВАТЬ: ... и, очевидно, тот же эффект, что и
svn merge -r HEAD:851 l3toks.dtx
, может быть достигнуто с:источник
--force
для перезаписи каталогов. Просто помните, что все изменения будут перезаписаны.svn export
- я что-то упустил или это просто не реализовано в этих графических интерфейсах?Недавно мне пришлось вернуться к определенной ревизии для отладки старой сборки, и это работало как по волшебству:
Мне пришлось разрешать все конфликты, используя опцию "tc", так как я не заботился о локальных изменениях (проверил все, о чем я заботился до возврата)
Вернуть к ревизии тоже было просто:
источник
То, что вы ищете, называется «обратным слиянием». Вы должны проконсультироваться с документами о функции слияния в книге SVN (как указывает Луапяд, или, точнее, первый комментатор на этом посту). Если вы используете Черепаху, вы также можете просто перейти в представление журнала и щелкнуть правой кнопкой мыши и выбрать «отменить изменения из этой ревизии» на той, где вы допустили ошибку.
источник
Обратное слияние - это именно то, что вам нужно (см. Ответ Луапьяда). Просто примените слияние к ошибочно принятому файлу, а не ко всему каталогу.
источник
Если вы хотите отменить только последнюю регистрацию, вы можете использовать следующее
Таким образом, вам не нужно искать номера текущей и предыдущей версий.
источник
SVN Merge объединит ревизии, а не отменит их. то есть, если у вас есть какое-то дополнение в вашей версии HEAD, то объедините его с предыдущей версией, тогда изменение сохранится.
Я использую SVN Cat, а затем перенаправить его в файл:
Тогда у вас есть содержимое 851 в этом файле и вы можете проверить его обратно.
источник
Если вы используете Eclipse IDE с плагином SVN, вы можете сделать следующее:
Это вернет файлы к ревизии, которую вы хотите. Просто помните, что SVN увидит изменения как новый коммит. То есть изменение получает новый номер ревизии, и между старой ревизией и новой нет никакой связи. В комментариях к фиксации вы должны указать, что вы возвращаете эти файлы к определенной ревизии.
источник