У меня есть файл с одной строкой в нем. Я создаю ответвление и добавляю вторую строку к тому же файлу. Сохраните и согласитесь на ответвление. Я переключаюсь назад на ведущее устройство. И добавьте другую, вторую строку к файлу. Сохраните и согласитесь на ведущее устройство. Таким образом, существует теперь 3 уникальных строки всего.
Если я теперь пытаюсь объединить ответвление назад с ведущим устройством, оно переносит конфликт слияния.
Почему Мерзавец наклона простое слияние каждая строка, один за другим?
Моя попытка слияния ведет себя что-то вроде этого:
PS D:\dev\testing\test1> git merge newbranch
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
PS D:\dev\testing\test1> git diff
diff --cc hello.txt
index 726eeaf,e48d31a..0000000
--- a/hello.txt
+++ b/hello.txt
@@@ -1,2 -1,2 +1,6 @@@
This is the first line.
- New line added by master.
-Added a line in newbranch.
++<<<<<<< HEAD
++New line added by master.
++=======
++Added a line in newbranch.
++>>>>>>> newbranch
Существует ли способ сделать это строками слота в автоматически, один за другим?
Допустим, файловая ветвь A выглядит так:
First line
Branch A's second line
А ветвь B выглядит так:
First line
Branch B's second line
При объединении есть два разных способа решения Это. Вот один способ:
First line
Branch A's second line
Branch B's second line
Вот другой способ:
First line
Branch B's second line
Branch A's second line
Git не знает, какой из этих двух вариантов вы предпочитаете, и подходят ли какие-либо слияния.
Существует стратегия слияния git под названием union
, которую можно настроить из конфигурационного файла .gitattributes
, который сделает это за вас, но вы не сможете контролировать порядок конфликтующие строки попадут в объединенный файл, и маркеры конфликта не укажут, где это произошло.
Вы также можете определить собственную стратегию слияния, которая могла бы использовать некоторые специальные знания о структуре файлов для определения правильного порядка.
скажем, у вас есть это line:
printf(something);
в branchA, вы делаете это:
while(x < 5)
printf(something);
в branchB, вы делаете это:
if(y>10)
printf(something);
Как вы можете объединить это, или, вернее, доверяете ли вы результату объединения, созданному для этого инструментом?
Я могу сказать вам, почему он не может объединить два - согласно git, строка 2 FileA - это «такой-то», тогда как строка 2 FileB - «что-то еще». Следовательно, согласно git, он пытается создать файл из FileA и FileB с одной строкой, имеющей два возможных значения. Он не может решить, какой из них вам нужен, поэтому сбрасывает их обоих и просит вас исправить.