#git #azure-devops
Вопрос:
У меня проблема с моими филиалами
Введение
У меня есть 3 ветви в моем проекте : Разработка, Основная и промежуточная
В ветке разработки мы добавляем новые функции, в основной ветке исправляем ошибки, на этапе развертывания развертываем для тестирования.
Когда запрос на извлечение ошибки завершен в основной ветке, мы делаем запрос на извлечение Main -> Dev**, чтобы поддерживать в актуальном состоянии ветку >Dev. Когда разрабатывается новая функция, в ветке разработки выполняется запрос на вывод.
Когда мы хотим развернуть все новые функции, мы создаем PullRequest Dev -> Main>, а затем PullRequest Main -> Staging>. Наконец, мы развертываем содержимое промежуточной ветви
Проблема
Когда я сравниваю вручную свои ветви Dev и Main, я вижу, что есть различия : в ветке Dev некоторые файлы появились в папке, но ранее они были перемещены в другую папку в предыдущей фиксации в основной ветке.
Когда я делаю git diff Main..Dev
, я вижу, что есть те же различия, что и выше.
Обычно в данный момент эти две ветви должны находиться в одном и том же состоянии. Поэтому я сделал запрос PullRequest Main -> Dev>, чтобы указать разработчику ветви правильное состояние (Основное состояние) : но в нем говорится, что в моем запросе PullRequest нет изменений.
Вопрос
Как я могу правильно передать в ветвь разработки текущее состояние моей основной ветви ?
Спасибо
Комментарии:
1. «, Я вижу, что есть различия.», не могли бы вы рассказать нам немного о том, какие различия вы видите?
2. Я обновляю вопрос, чтобы добавить больше точности для предложения «Я вижу, что есть различия».
3. Как заканчивается запрос на вытягивание? Объединить, перебазировать или раздавить и объединить?
4. если вам нужно точно такое же состояние, которое вы не хотите объединять, вы хотите, чтобы ветвь была одинаковой. вы можете достичь этого состояния, исправив некоторый конфликт при слиянии, приводящий к этой разнице, после чего при слиянии вы получите это разрешение.
5. @мэтт : Это «Слияние (без перемотки вперед)»
Ответ №1:
Что могло случиться
Как сказал @matt в комментариях, это, вероятно, результат предыдущего слияния, когда конфликт мог быть разрешен без перемещения файлов. Теперь, когда вы снова объединяетесь, Git думает, что он уже обработал это переименование, поэтому ему не нужно с этим сталкиваться. Вы могли бы подтвердить эту теорию, посмотрев историю фиксаций с момента последней точки слияния: являются ли переименования до или после этого?
Как слиться Main
и заставить Dev
принять состояние Main
Если на данный момент вы хотите отбросить текущее состояние Dev
и сделать его точно Main
таким, как оно есть, и вы хотите выполнить операцию слияния , я бы использовал эту ours
стратегию. Я не уверен, что вы можете сделать это с помощью PR, вам, вероятно, придется сделать это на своем компьютере и нажать, я надеюсь, что ваш рабочий процесс позволяет это!
К сожалению, вы не можете сделать это напрямую git merge -s theirs Main
Dev
, это было бы слишком просто. Вам нужно сделать git merge -s ours Dev
от Main
, чтобы создать коммит слияния, который вы хотите включить Dev
:
git checkout Main
git merge -s ours Dev # this "merges" Dev in but ignores all its changes
# don't push this!
git checkout Dev
git merge Main # this should be a fast-forward merge
# now you can push Dev
И вы можете очистить свою песочницу, когда закончите, вернувшись Main
туда, где она была, так как это слияние было предназначено для Dev
:
git checkout Main
git reset --hard origin/Main
Что делать , если я хочу переименовать Main
, но не потерять другие изменения Dev
?
В этом случае, я думаю, вам нужно будет выполнить некоторую ручную работу. Если переименования действительно произошли до предыдущего слияния, и слияние, которое внесло эти фиксации в историю Dev
, было разрешено без применения переименований, вам необходимо снова воссоздать переименования в Dev
ветке, возможно, вручную.
Я не думаю, что у вас есть возможность вернуться к этому более раннему слиянию и правильно его повторить, но если бы вы могли, это могло бы быть самым чистым вариантом.
Комментарии:
1. Спасибо за ваше решение, оно работает ! Я не знаю параметров «-s our» команды слияния, спасибо за открытие !