git cherry-pick: как рассматривать только строки, измененные коммитом (то есть, не окружающий контекст)?
У меня есть проект с двумя ветвями:
D---E branch1
/
---A---C branch2
Я хочу применить коммит E (но не D) на вершине branch2.
Я использовал git cherry-pick и git mergetool (с meld) для разрешения конфликтов. Пока все идет хорошо.
Однако предположим, что состояние файла после фиксации C равно
lineC1
<context C>
lineC2
И изменение, внесенное фиксацией E, является
-lineC1
+lineE1
<context E>
-lineC2
+lineE2
Я ожидал бы, что результат, показанный по умолчанию mergetool, будет быть
lineE1
<context C>
lineE2
(то есть строки E1 и E2 изменяются в соответствии с фиксацией E, но внутренний контекст сохраняется из текущей ветви).
Вместо этого mergetool (то есть meld) по умолчанию показывает:
lineC1
<context E>
lineC2
Что на самом деле не имеет никакого смысла.
Как я могу поручить git cherry-pick сохранить контекст из branch2 и рассматривать только изменения в строках, измененных commit E ?
2 ответов:
Обычно нет правильного решения для слияния, программы могут только давать эвристические предложения. Если предложение не то, что вам нужно, вам просто нужно отредактировать его. Я думаю, что мелд должен показать вам все, что вам нужно на экране. И даже если это не так, вы можете использовать команды типа
git show <sha1>:<file>для отображения каждой существующей версии вашего файла для вставки копии. После редактирования среднего столбца в meld git примет его таким, каков он есть, независимо от внесенных изменений.Вы также можете хотите попробовать
git config --global --add merge.conflictstyle diff3В следующем cherry-pick (или merge) результат конфликта будет отформатирован немного по-другому и при некоторой удаче более подходит для вашего случая.
Вы можете попробовать использовать другую стратегию слияния или другие варианты стратегии для стратегии по умолчанию (рекурсивной).
Взгляните на
git merge --help, раздел Стратегии слияния.У меня была похожая проблема, хотя она не включала в себя эту вашу разницу в контексте, и решила ее с помощью опции стратегии
theirs(флаг-Xtheirs)
Comments