Скажем, я начинаю с одного коммита на мастере в test.txt
, просто строка Hello world!
, за которой следует новая строка (чтобы не допустить различий в первой строке при добавлении второй строки).
Затем я разветвляю этот коммит с именем ветки modification
.Здесь я изменяю файл с
Hello world!
на
Hello world!
This is another line.
и затем фиксирую эту ветку.
Затем я проверяю master и изменяю файл с
Hello world!
на
Hello world! This is a new thing.
И затем я фиксирую это на master
.Таким образом, в обоих коммитах я просто меняю одну строку.Поскольку у меня в начале был перевод строки на master, дополнительный коммит на master
only изменяет строку 1, в то время как commit на modification
only изменяет строку 2. Следовательно, яне понимаю, почему это приводит к конфликту слияния, когда я пытаюсь слить modification
в master.Однако, я получаю это как diff3
вывод.
<<<<<<< HEAD
Hello world! This is a new thing.
||||||| merged common ancestors
Hello world!
=======
Hello world!
This is another line.
>>>>>>> modification
Почему бы git не понять, что они меняют отдельные строки и объединяют эти две вместе?Я бы подумал, что потребуется модификация строки 1 из коммита на master
и модификация строки 2 на modification
, чтобы сформировать:
Hello world! This is a new thing.
This is another line.
Единственная возможность, о которой я могу думать, - это что-то о модификацииодин и тот же кусок независимо от номера строки.
Интересно, что если вместо modifications
я добавлю This is another line.
в строку 3 вместо строки 2, оставив эту пустую строку в ветви modification
, объединение будет продолжено без конфликтов.