Откат плохих изменений с помощью SVN в Eclipse - PullRequest
80 голосов
/ 30 августа 2008

Допустим, я допустил некоторые неверные изменения в хранилище Subversion. Затем я совершаю хорошие изменения, которые хочу сохранить.

Какой самый простой способ откатить эти плохие изменения в Eclipse и сохранить их? Предполагая, что файлы, относящиеся к исправленным изменениям, не совпадают с файлами, относящимися к исправленным изменениям. Как все изменится, если в те же файлы были внесены хорошие изменения как плохие?

В основном я ищу способ сделать это с помощью плагинов Eclipse (Subclipse или Subversive), но команды командной строки также интересны.

Ответы [ 7 ]

76 голосов
/ 15 сентября 2008

In Eclipse Ganymede (Subclipse)

Выберите проект / файл, содержащий плохие изменения, и во всплывающем меню выберите:

Команда -> Показать историю

Изменения, связанные с этим проектом / файлом, будут отображаться на вкладке «История».

Найдите ревизию, в которой были зафиксированы "плохие изменения", и во всплывающем меню выберите:

Возврат изменений из редакции X

Это объединит изменения в файле (ах), измененных в рамках неверной ревизии, с ревизией, предшествующей плохой ревизии.

Здесь есть два сценария:

  1. Если вы не зафиксировали никаких изменений для этого файла (плохая ревизия является последней ревизией для этого файла), он просто удалит изменения, внесенные в неверную ревизию. Эти изменения объединяются с вашей рабочей копией, поэтому вы должны их зафиксировать.

  2. Если вы зафиксировали некоторые изменения для этого файла (неверная ревизия не является последней ревизией для этого файла), вам придется вручную разрешить конфликт. Допустим, у вас есть файл readme.txt с неверным номером ревизии 33. Кроме того, вы сделали еще один коммит для этого файла в ревизии 34. После того, как вы выберете Отменить изменения из ревизии 33 , вы получите в вашей рабочей копии:

readme.txt.merge-left.r33 - неверная версия

readme.txt.merge-right.r32 - до неверной ревизии

readme.txt.working - версия рабочей копии (такая же, как в r34, если у вас нет незафиксированных изменений)

Исходный файл readme.txt будет помечен как конфликтующий и будет содержать объединенную версию (где удаляются изменения из неверной ревизии) с некоторыми маркерами (<<<<<<< .working и т. Д.). Если вы просто хотите удалить изменения из неверной ревизии и сохранить изменения, сделанные после этого, тогда все, что вам нужно сделать, это удалить маркеры. В противном случае вы можете скопировать содержимое одного из 3 файлов, указанных выше, в исходный файл. Что бы вы ни выбрали, когда вы закончите, пометьте конфликт как разрешенный </p>

Команда - Марк решен

Временные файлы будут удалены, а ваш файл будет помечен как измененный. Как и в 1, вы должны зафиксировать изменения.

Обратите внимание, что это не удаляет ревизии из истории ревизий в хранилище svn. Вы просто сделали новую ревизию, в которой удаляются изменения из неверной ревизии.

29 голосов
/ 30 августа 2008

У вас есть два варианта сделать это.

Quick and Dirty выбирает ваши файлы (используя ctrl ) в представлении Project Explorer, щелкните их правой кнопкой мыши, выберите Replace with..., а затем выберите лучший вариант для вас, из Latest from Repository, или какая-то Branch версия. После получения этих файлов вы изменяете их (с пробелами или исправляете что-то), вызываете их и фиксируете их для создания более новой ревизии.

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

Обе команды имеют свои эквиваленты командной строки: svn revert и svn merge.

12 голосов
/ 22 сентября 2008

Если вы хотите сделать по 1 файлу за раз, вы можете перейти к представлению «История» для файла, если у вас установлен плагин Eclipse SVN. "Team-> Show History"

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

5 голосов
/ 05 ноября 2010

В Eclipse с использованием Subversive:

Щелкните правой кнопкой мыши по вашему проекту> Команда> Объединить

В окне слияния выберите ревизии, которые вы хотите отменить как обычно, но также включите флажок «Обратное слияние».

Объединить как обычно.

5 голосов
/ 15 сентября 2008

Я написал пару постов в блоге на эту тему. Тот, который ориентирован на Subclipse: http://markphip.blogspot.com/2007/01/how-to-undo-commit-in-subversion.html, а тот, который ориентирован на командную строку: http://blogs.collab.net/subversion/2007/07/second-chances/

1 голос
/ 31 августа 2008

В svnbook есть раздел о том, как Subversion позволяет отменить изменения из определенной ревизии, не затрагивая изменения, произошедшие в последующих ревизиях:

http://svnbook.red -bean.com / о / 1,4 / svn.branchmerge.commonuses.html # svn.branchmerge.commonuses.undo

Я не часто использую Eclipse, но в TortoiseSVN вы можете сделать это из диалога журнала; просто щелкните правой кнопкой мыши ревизию, которую вы хотите отменить, и выберите «Отменить изменения из этой ревизии».

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

0 голосов
/ 24 октября 2016

У меня та же проблема, но опция CleanUp eclipse для меня не работает.

1) установить TortoiseSVN
2) Зайдите в проводник Windows и щелкните правой кнопкой мыши по каталогу вашего проекта
3 Выбор опции очистки (с помощью опции блокировки блокировки)

Это работает.

Надеюсь, это кому-нибудь поможет.

...