Git Pull Запрашивает никаких изменений, но git diff показывает изменения

#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» команды слияния, спасибо за открытие !