Почему этот вишневый выбор приводит к конфликту слияния

Изменить: я добавил некоторую информацию, которую считал ненужной, но это не так. У меня есть две ветки, A и B. После трех коммитов в A, которые изменяют файл.c, я хочу выбрать их в B, также есть файл.h, который был изменен в A ~ 1

> git cherry-pick A~2
Success
> git cherry-pick A~1
error: could not apply 81e0723... 
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
> git status
You are currently cherry-picking commit 81e0723.
Unmerged paths:
(use "git add <file>..." to mark resolution)

  both modified:   some/unrelated/file.txt
  both modified:   file.c

Теперь, когда вы смотрите на some/unrelated/file.txt, он содержит изменения в файле.h где-то прямо посередине. Так что это похоже на ошибку в git. Так что теперь я вручную отменю изменения some/unrelated/file.txt и добавлю их в file.h.


person crunsher    schedule 23.06.2015    source источник
comment
Для несвязанного файла, какие изменения он показывает?   -  person David Deutsch    schedule 23.06.2015
comment
Не могли бы вы нарисовать график фиксации вашей ситуации? У меня есть ощущение, что rebase мог бы сделать то же самое намного проще.   -  person D-side    schedule 23.06.2015
comment
Я исправил проблему и напишу подробный ответ сегодня/завтра.   -  person crunsher    schedule 23.06.2015
comment
@crunsher Никогда не удосужились это написать?   -  person Paul Brittain    schedule 27.04.2021


Ответы (2)


Возможно, вишневый выбор изменяет функцию, которая также была изменена ранее в истории B, поэтому изменения конкретно в A~1 относятся к строкам, которые уже выглядели иначе, чем в версии B, и git не может видеть, где в B вишенка Применяются изменения -pick.

Также возможно, что контекст, который git находит для изменений, имеет злых близнецов, подстерегающих в другом месте кода (скажем, несколько строк с одними лишь отдельными закрывающими фигурными скобками), и другие изменения поместили реальный соответствующий оригинал в ваш код достаточно далеко от того места, где именно в A~1^ поиск контекста в B вместо этого находит что-то другое. Руководство предлагает прервать выбор вишни и повторить попытку с помощью git cherry-pick -Xpatience может быть достаточно, чтобы избежать проблем с теми, кто тратит обычно необоснованное количество времени, пытаясь не потеряться в море фигурных скобок. Возможно, это хорошее место для начала, если вам нужны подробности о том, как это работает .

person jthill    schedule 23.06.2015

Сбор вишен ничем не отличается от применения набора исправлений по порядку (с преимуществом получения предыдущих сообщений фиксации). Это обязательно приводит к появлению новых BLOB-объектов, в чем вы можете убедиться, заметив, что он фиксирует разные ша.

Когда приходит время слияния, git теперь думает, что просматривает другую историю, потому что технически это так, и, следовательно, возникает конфликт слияния.

person jonathan3692bf    schedule 23.06.2015