Вернуть из ревизии
Я использую черепаху SVN.
Я недавно проверил дерьмо кода (один коммит). На 3-х часовой встрече они решили отказаться от моего кода и этой функции. Мой начальник хочет, чтобы я вернул Subversion со старым кодом для этой области приложения.
Я бы сказал, что было затронуто около 3-4 файлов. На последнем коммите, где я зафиксировал изменения новых функций, мне нужно будет откатить эти файлы до того состояния, в котором они находились до того, как я их зарегистрировал.
Так что я не совсем понимаю, что делает Revert Back to Revision. Я пошел дальше и нашел самую последнюю версию этих файлов в прошлых коммитах в журнале, щелкнул правой кнопкой мыши эти файлы в журнале и сделал это, чтобы вернуться к ревизии.
Теперь это полностью заменит мою локальную копию более старой версией? Правильно ли я сделал это, если хотел вернуться только к подмножеству функций, которые я проверял в прошлый раз?
Итак, теряю ли я все изменения, когда возвращаюсь к своей локальной версии этого файла? Похоже, он сливается со старым с моим локальным, который имеет более новый код... ну, не совсем то, что я ожидал.
(да, я прочитал страницу на ней из документации Subversion, и не очень ясно или подробно о том, что это означает за пределами технического подхода, они кратко излагают это, что находится на очень высоком уровне и пропускает основы того, что на самом деле происходит локально в вашей работе. копия)
Итак, подведем итоги того, что я сделал:
- Я проверил кучу изменений в одной точке.
- Коллега получает это обновление через обновление SVN
- У нас встреча, босс говорит, что мы убираем эту особенность
- Эта функция была около 3-4 файлов из списка файлов, которые были зафиксированы в этой ревизии
- Я хочу поместить эти конкретные файлы в состояние, в котором они были раньше... некоторые из них будут возвращены в редакцию x, некоторые в y и т. Д., Потому что последние изменения в некоторых из этих файлов были сделаны с разными номерами редакций.
- Итак, я начинаю с журнала. Я ищу первый файл. Давайте назовем это somefile1.aspx. Я обнаружил, что последний из этого файла был зарегистрирован в Revision X. Поэтому я щелкаю его правой кнопкой мыши в наборе изменений этой ревизии и выполняю функцию "Вернуться к ревизии".
- Я заметил, что, похоже, он действительно слил код этой ревизии с моей локальной копией?? Я думаю... не уверен, поэтому я позирую, потому что я не понимаю этого.
- Я делаю то же самое для еще 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 вы делаете так:
- Начните с вашей обновленной рабочей копии
- Подтяните бревно
- Нажмите на ревизию, содержащую изменения, которые вы хотите откатить
- Щелкните правой кнопкой мыши файл, который вы хотите откатить, и выберите "Отменить изменения из этой ревизии".
- Повторите шаг 4 для каждого файла для отката
- Вы увидите, что это привело к локальным изменениям этих файлов в вашей рабочей копии. Это то, что вы хотите; это как если бы вы отменили изменения, редактируя файлы вручную. Но вы не потеряете никаких изменений от изменений, которые произошли после того, как вы откатились.
- Разрешите любые конфликты, которые возникли
- совершить
Теперь вы отменили только те изменения, которые произошли в этой одной ревизии, не отбрасывая с тех пор никаких изменений, которые вы хотите сохранить.