Вот переписанный принятый ответ, который идеально проясняет преимущества / риски возможных подходов:
Вы пытаетесь выбрать вишню fd9f578, которая была объединена с двумя родителями.
Вместо выбора вишни для слияния проще всего выбрать вишню коммит (ы), который вы на самом деле хотите, из каждой ветви в слиянии.
Поскольку вы уже слились, вероятно, все ваши коммиты есть в вашем списке. Cherry-выберите их напрямую, и вам не нужно возиться с коммитом слияния.
Объяснение
Способ, которым работает вишневый кир, заключается в том, чтобы взять diff, который представляет набор изменений (различие между рабочим деревом в этой точке и рабочим деревом его родителя), и применить набор изменений к текущей ветви.
Если у коммита есть два или более родителей, как в случае слияния, этот коммит также представляет два или более различий. Ошибка возникает из-за неопределенности, к которой должен применяться diff.
альтернативы
Если вы решите, что вам нужно включить слияние с выбором вишни для связанных коммитов, у вас есть два варианта:
(более сложный и неясный; также отбрасывает историю) вы можете указать, к какому из родителей следует обратиться.
Для этого используйте опцию -m
. Например, git cherry-pick -m 1 fd9f578
будет использовать первый родительский элемент, указанный в слиянии, в качестве базы.
Также учтите, что когда вы выбираете коммит слияния, он сворачивает все изменения, внесенные в родительский элемент, который вы не указали, в -m
в этот один коммит . Вы теряете всю их историю и собираете вместе все их различия. Ваш звонок.
(проще и более знакомо; сохраняет историю) вы можете использовать git merge
вместо git cherry-pick
.
- Как обычно с
git merge
, он попытается применить все коммиты, которые существуют в ветви, которую вы объединяете, и перечислить их индивидуально в вашем журнале git.