Почему Мерзавец не может объединить изменения файла с измененным родителем/ведущим устройством?

У меня есть файл с одной строкой в нем. Я создаю ответвление и добавляю вторую строку к тому же файлу. Сохраните и согласитесь на ответвление. Я переключаюсь назад на ведущее устройство. И добавьте другую, вторую строку к файлу. Сохраните и согласитесь на ведущее устройство. Таким образом, существует теперь 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

Существует ли способ сделать это строками слота в автоматически, один за другим?

7
задан Pat Notz 9 April 2010 в 13:08
поделиться

4 ответа

Допустим, файловая ветвь 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 не знает, какой из этих двух вариантов вы предпочитаете, и подходят ли какие-либо слияния.

12
ответ дан 6 December 2019 в 09:59
поделиться

Существует стратегия слияния git под названием union , которую можно настроить из конфигурационного файла .gitattributes , который сделает это за вас, но вы не сможете контролировать порядок конфликтующие строки попадут в объединенный файл, и маркеры конфликта не укажут, где это произошло.

Вы также можете определить собственную стратегию слияния, которая могла бы использовать некоторые специальные знания о структуре файлов для определения правильного порядка.

4
ответ дан 6 December 2019 в 09:59
поделиться

скажем, у вас есть это line:

printf(something);

в branchA, вы делаете это:

while(x < 5)
printf(something);

в branchB, вы делаете это:

if(y>10)
printf(something);

Как вы можете объединить это, или, вернее, доверяете ли вы результату объединения, созданному для этого инструментом?

2
ответ дан 6 December 2019 в 09:59
поделиться

Я могу сказать вам, почему он не может объединить два - согласно git, строка 2 FileA - это «такой-то», тогда как строка 2 FileB - «что-то еще». Следовательно, согласно git, он пытается создать файл из FileA и FileB с одной строкой, имеющей два возможных значения. Он не может решить, какой из них вам нужен, поэтому сбрасывает их обоих и просит вас исправить.

1
ответ дан 6 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: