Предположим, что есть две ветви, master
и slave
, и они редактируют один и тот же файл и одну и ту же строку. Изначально содержимое файла
foo bar
затем в ветке slave
отредактировано, чтобы стать
foo bar baz
Теперь пользователь ветви slave
форматирует патч (git format-patch master
) и отправляет его пользователю ветви master
. В то же время в ветке master
тот же файл редактируется и становится
foo bar spam eggs
Патч не может быть применен, и master
просит slave
объединить и создать новый патч. Когда master
объединен с slave
и конфликт разрешен, самое время переформатировать патч. График коммитов выглядит так:
slave: master:
foo bar baz spam eggs
| \
| \
| foo bar spam eggs
| |
foo bar baz |
\ |
\ |
+--------- foo bar
Последний коммит (слияние) на slave
выглядит так:
@@@ -1,1 -1,1 +1,1 @@@
- foo bar baz
-foo bar spam eggs
++foo bar baz spam eggs
Однако, если мы теперь запустим git format-patch master
, мы все равно получим точно такой же патч, как и раньше, который не учитывает слияние и разрешение конфликтов:
@@ -1 +1 @@
-foo bar
+foo bar baz
Как вы форматируете патч, который будет применяться против последнего мастера? Я хотел бы сделать это без rebase
.
Обновление: git format rev1..rev2
, где rev1
и rev2
- главы ветвей master
и custom
соответственно, не включает изменения, связанные с разрешением конфликтов. git-diff
форматирует правильный патч, но пропускает сообщения о коммитах.