Каждый коммит копируется (или как бы) git cherry-pick
.Вишневый пик - это слияние, база слияния которого является родителем выбранного коммита, при этом версия --ours
является коммитом HEAD
, а версия --theirs
- выбранным коммитом.Итак, учитывая:
C0--C1 <-- master
\
C2--C3 <-- test
и:
git checkout test && git rebase master
Git сначала скопирует C2
в C2'
, затем скопирует C3
в C3'
.
При копировании C2
база объединения составляет C0
(родительский элемент C2
), --ours
равен C1
(наконечник master
), а --theirs
равен C2
(копируется),После того, как копия закончена, у нас есть это:
C2' <-- HEAD
/
C0--C1 <-- master
\
C2--C3 <-- test
Далее Git cherry-picks C3
.Таким образом, база слияния составляет C2
(родительский элемент C3
), --ours
- C2'
, а --theirs
- C3
.
В случае разницы возникает конфликт слияния (* 1037)*) от базы к нашей, по сравнению с разницей от базы к их, затрагивает "те же строки" одного и того же файла.«То же» в этом случае включает в себя одну строку после строки, которой коснулись.Итак, сравните содержимое C2
(base) с каждым из C2'
и C3
, чтобы увидеть, какие строки изменились в нашей (C2
против C2'
) и их (C2
против C3
),Если мы взяли «их» изменение в строку 2 при создании C2'
, разница от C2
до C2'
пуста, и, следовательно, объединение тривиально разрешается путем взятия файла из C3
.