Git не создает конфликта, когда я думаю, что это должно быть
Я учусь развертывать веб-сайт на django, и для этого у меня есть 2 копии кода в 2 ветках Git, одна для разработки (master), а другая для развертывания (deployment) с различными конфигурациями.
Я внес некоторые изменения в главную ветку и хочу, чтобы они были доступны при развертывании. У меня должны возникнуть некоторые конфликты из-за разных файлов конфигурации, как показано в settings.py в master есть значение debug=True, и разрешенные хосты пусты, с другой стороны, в deployment оно равно False, и разрешенные хосты добавлены.
Git не создает никаких конфликтов с этими двумя строками, поэтому я не могу выбрать, какую из них я хочу использовать при объединении с deployment.
примечание: изменения в главной ветке git, которые я хочу внести в развертывание, не должны приводить к конфликтам. конфликты, которых я ожидаю, связаны только с уже существующими различиями в коде (цель создания этих двух веток).
Объяснение было кратко изложено в комментариях, но вот немного более подробное объяснение того, почему конфликта нет.
При объединении A
и B
git не просто просматривает 2 подсказки и проверяет, отличаются ли они друг от друга, чтобы создать конфликт. Это означало бы, что все слияния приведут к конфликтам, а это не то, чего вы хотите как разработчик. Что на самом деле делает git, так это сравнивает, как изменились два подсказки по сравнению с не друг с другом, а с общим предком (подумайте о самом близком общем предке в истории, но в сложные истории ветвей могут быть более... интересными).
Итак, предположим, что A
и B
имеют общего предка C
. Теперь git видит, как все изменилось C
по сравнению с A
и C
по сравнению с B
. Теперь git берет эти 2 набора различий и пытается объединить их ... когда происходит столкновение, вы получаете конфликт.
Итак, в вашем примере, если в одной ветви у вас есть debug=False
, а в другой ветви у вас есть debug=True
, единственный способ вызвать конфликт - это если в общем предке у вас есть строка которое имеет значение, отличное от False
или True
.