git cherry-pick конфликт слияния тянет в других коммитах? - PullRequest
3 голосов
/ 21 февраля 2012

По какой-то причине это выглядит так, будто git cherry-pick выбирает другие коммиты, когда у мух возникают конфликты слияния.Они исчезают, когда мы используем git mergetool, но не позволяют нам вручную редактировать файл, конфликтующий при слиянии.

Кто-нибудь знает, почему это происходит?

Чтобы показать, что я имею в виду, давайте возьмем свежийрепозиторий new git 1.7.4 с одним файлом foo:

header

footer

Давайте создадим в этой точке новую ветвь с именем bar.Вернемся к мастеру, давайте добавим три изменения в этот файл в отдельных коммитах.

Фиксация 1:

header

+add something
+
footer

Фиксация 2:

header

add something

+add something else
+
footer

Фиксация 3:

header

add something

add something else

+important change!
+
footer

Поскольку этот последний коммит важен, после того, как мы решим, что мы хотим вернуть его к ветке bar и git cherry-pick <commit> на этой ветке.

К сожалению, это приводит кинтересный конфликт слияния в файле foo:

header

<<<<<<< HEAD
=======
add something here

add something else here

important change!

>>>>>>> 356ca3c... important change
footer

Обратите внимание, что git mergetool, кажется, делает правильную вещь и производит это:

header

+important change!
+
footer

Почему файл, конфликтующий слиянием, содержитсовершает до того, что мы пытались выбрать вишню ?

1 Ответ

0 голосов
/ 21 февраля 2012

Git настроен скептически и не будет выполнять слияние, если не найдет подходящих ребер, к которым будет применяться патч.Патч будет применяться к несуществующему номеру строки.Изучите патч, который фиксирует, и убедитесь, что он применяется по номеру строки, который не имеет смысла.Так как это вишня, она не принимает во внимание, как файл должен быть таким, и что было бы нормально добавить эту запись.Надеюсь, что это имеет смысл.

...