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 ?

745   2  

2 ответов:

Обычно нет правильного решения для слияния, программы могут только давать эвристические предложения. Если предложение не то, что вам нужно, вам просто нужно отредактировать его. Я думаю, что мелд должен показать вам все, что вам нужно на экране. И даже если это не так, вы можете использовать команды типа git show <sha1>:<file> для отображения каждой существующей версии вашего файла для вставки копии. После редактирования среднего столбца в meld git примет его таким, каков он есть, независимо от внесенных изменений.

Вы также можете хотите попробовать git config --global --add merge.conflictstyle diff3

В следующем cherry-pick (или merge) результат конфликта будет отформатирован немного по-другому и при некоторой удаче более подходит для вашего случая.

Вы можете попробовать использовать другую стратегию слияния или другие варианты стратегии для стратегии по умолчанию (рекурсивной).

Взгляните на git merge --help, раздел Стратегии слияния.

У меня была похожая проблема, хотя она не включала в себя эту вашу разницу в контексте, и решила ее с помощью опции стратегии theirs (флаг -Xtheirs)

Comments

    Ничего не найдено.