Git учитывает контекст и ищет окружающие строки, а также те, которые были добавлены / удалены.
Это имеет смысл, потому что git нужно знать, где следует применить изменение от коммита.
В вашем случае ветка from-a
имеет содержание
a
Окружающие линии пусты.
У коммита, который вы пытаетесь выбрать cherry, есть такое содержание:
diff --git a/abc.txt b/abc.txt
index 422c2b7..de98044 100644
--- a/abc.txt
+++ b/abc.txt
@@ -1,2 +1,3 @@
a
b
+c
Даже если сообщение о коммите показывает более широкий контекст вокруг добавленных / удаленных строк, git будет пытаться соответствовать только одной строке выше и одной строке ниже модификации.
(Спасибо дас-г )
Это означает, что git попытается найти строку:
b
в конце файла и вставить строку
c
после него.
Так как в вашей ветке from-a
(текущий HEAD
), git не может найти строку
b
в конце файла и поэтому не может корректно применить ваш патч, что привело к конфликту.
текст
<<<<<<< HEAD
=======
b
c
>>>>>>> 3a0882d... write c
представляет конфликт, при котором git видит, что фактическое содержимое в конце файла - ничто, обозначенное
<<<<<<< HEAD
=======
но git ожидал найти строку
b
для добавления строки
c
после него, обозначенное
=======
b
c
>>>>>>> 3a0882d... write c
Вам остается разрешить конфликт и решить, как присоединиться к этим двум государствам.
При возникновении конфликтов всегда ищите код между парами из <<<<<<< HEAD
и >>>>>>>
.
Между ними у вас будет =======
, который отделяет состояние от текущего HEAD
и состояние, ожидаемое после применения патча.