Как переформатировать патч после слияния в Git? - PullRequest
5 голосов
/ 18 июня 2011

Предположим, что есть две ветви, 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 форматирует правильный патч, но пропускает сообщения о коммитах.

1 Ответ

1 голос
/ 18 июня 2011

Почему вы используете патчи? Вы должны толкать и тянуть между репо.

Слияние - это не то, из чего вы можете сделать патч. Это будет следовать только за первым родителем. Вы можете получить то, что вы хотите, используя git diff и форматируя патч, указав 2 различных коммита для различия.

Надеюсь, это поможет.

...