Вернуть из ревизии

Я использую черепаху SVN.

Я недавно проверил дерьмо кода (один коммит). На 3-х часовой встрече они решили отказаться от моего кода и этой функции. Мой начальник хочет, чтобы я вернул Subversion со старым кодом для этой области приложения.

Я бы сказал, что было затронуто около 3-4 файлов. На последнем коммите, где я зафиксировал изменения новых функций, мне нужно будет откатить эти файлы до того состояния, в котором они находились до того, как я их зарегистрировал.

Так что я не совсем понимаю, что делает Revert Back to Revision. Я пошел дальше и нашел самую последнюю версию этих файлов в прошлых коммитах в журнале, щелкнул правой кнопкой мыши эти файлы в журнале и сделал это, чтобы вернуться к ревизии.

Теперь это полностью заменит мою локальную копию более старой версией? Правильно ли я сделал это, если хотел вернуться только к подмножеству функций, которые я проверял в прошлый раз?

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

(да, я прочитал страницу на ней из документации Subversion, и не очень ясно или подробно о том, что это означает за пределами технического подхода, они кратко излагают это, что находится на очень высоком уровне и пропускает основы того, что на самом деле происходит локально в вашей работе. копия)

Итак, подведем итоги того, что я сделал:

  1. Я проверил кучу изменений в одной точке.
  2. Коллега получает это обновление через обновление SVN
  3. У нас встреча, босс говорит, что мы убираем эту особенность
  4. Эта функция была около 3-4 файлов из списка файлов, которые были зафиксированы в этой ревизии
  5. Я хочу поместить эти конкретные файлы в состояние, в котором они были раньше... некоторые из них будут возвращены в редакцию x, некоторые в y и т. Д., Потому что последние изменения в некоторых из этих файлов были сделаны с разными номерами редакций.
  6. Итак, я начинаю с журнала. Я ищу первый файл. Давайте назовем это somefile1.aspx. Я обнаружил, что последний из этого файла был зарегистрирован в Revision X. Поэтому я щелкаю его правой кнопкой мыши в наборе изменений этой ревизии и выполняю функцию "Вернуться к ревизии".
  7. Я заметил, что, похоже, он действительно слил код этой ревизии с моей локальной копией?? Я думаю... не уверен, поэтому я позирую, потому что я не понимаю этого.
  8. Я делаю то же самое для еще 3 файлов... посмотрите, когда они были зафиксированы в последний раз, щелкните их правой кнопкой мыши в конкретной ревизии и вернитесь к ревизии для них... при условии, что это переведет мою локальную версию в это состояние а также и в значительной степени уничтожить даже мои изменения также для этого файла локально

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

3 ответа

Решение

Вас может заинтересовать мой ответ на чрезвычайно похожий вопрос некоторое время назад:

Как удалить 1 ревизию папки в Subversion

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

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

Предполагая, что вы хотите отменить изменения, внесенные вами в ревизию 1234: просто объедините различия от 1234 до 1234-1.

В CLI это будет: svn merge -r 1234:1233 http://your-repo/ && svn ci

В TortoiseSVN получите диалоговое окно слияния "Объединить диапазон ревизий", введите 1234 как ревизию для слияния и нажмите "Обратное слияние". Затем проверьте, не было ли у вас никаких конфликтов (с изменениями, внесенными другими людьми после 1234 года), и выполните проверку. Тогда в вашей редакции HEAD этот код не будет.

Я не уверен, что вы можете сделать это для определенных файлов в TortoiseSVN. Я сделал это в CLI, и вы тоже можете попробовать (инструмент CLI, TortoiseSVN, AnkhSVN, все они используют метаданные).

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

coffeeaddict-

revert а также update оба вводят в заблуждение термины здесь. Вы не делаете ничего из этого. Вы "обратное слияние" изменений.

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

В TortoiseSVN вы делаете так:

  1. Начните с вашей обновленной рабочей копии
  2. Подтяните бревно
  3. Нажмите на ревизию, содержащую изменения, которые вы хотите откатить
  4. Щелкните правой кнопкой мыши файл, который вы хотите откатить, и выберите "Отменить изменения из этой ревизии".
  5. Повторите шаг 4 для каждого файла для отката
  6. Вы увидите, что это привело к локальным изменениям этих файлов в вашей рабочей копии. Это то, что вы хотите; это как если бы вы отменили изменения, редактируя файлы вручную. Но вы не потеряете никаких изменений от изменений, которые произошли после того, как вы откатились.
  7. Разрешите любые конфликты, которые возникли
  8. совершить

Теперь вы отменили только те изменения, которые произошли в этой одной ревизии, не отбрасывая с тех пор никаких изменений, которые вы хотите сохранить.

Другие вопросы по тегам