Похоже, что не существует решения, создающего отдельные коммиты а-ля git format-patch
, но FWIW, вы можете отформатировать патч, содержащий эффективный коммит слияния, подходящий / совместимый с git am
:
Очевидно, руководство Git Reference содержит первый совет:
git log -p показ патча, вводимого при каждом коммите
[...] Это означает, что для любого коммита вы можете получить патч, коммит, внедренный в проект. Вы можете сделать это, запустив git show [SHA]
с определенным SHA коммита, или вы можете запустить git log -p
, который говорит Git устанавливать патч после каждого коммита. [...]
Теперь страница руководства git-log дает второй намек:
git log -p -m --first-parent
... Показывает историю, включая изменения различий, но только с точки зрения «основной ветви», пропуская коммиты, полученные из объединенных ветвей, и показывая полные различия изменений, внесенных слияниями. Это имеет смысл только при соблюдении строгой политики объединения всех веток тем при нахождении в одной ветке интеграции.
Что в свою очередь означает конкретные шаги:
# Perform the merge:
git checkout master
git merge feature
... resolve conflicts or whatever ...
git commit
# Format a patch:
git log -p --reverse --pretty=email --stat -m --first-parent origin/master..HEAD > feature.patch
И это можно применять по назначению:
git am feature.patch
Опять же, он не будет содержать отдельные коммиты, но выдает git am
совместимый патч из коммита слияния.
Конечно, если вам не нужен git am
совместимый патч, тогда он намного проще:
git diff origin/master > feature.patch
Но я полагаю, вы уже рассчитали столько же, и если вы попали на эту страницу здесь, вы на самом деле ищете обходной путь / решение, которое я описал выше. ;)