Во-первых: старайтесь не сочетать git rebase -p
с большинством интерактивных операций, включая squa sh, исправления или перестановки, поскольку это может привести к множеству плохих действий. Если у вас версия Git, то есть 2.18 или новее, используйте новую опцию --rebase-merges
(git rebase -r
для краткости), которая ведет себя гораздо лучше.
Что касается конкретной ошибки, которую вы видите: это технически невозможно перебазировать слияние вообще, и ни git rebase -p
, ни новый улучшенный git rebase -r
этого не делают. Вместо этого они повторно выполняют слияние. Когда они повторно выполняют слияние, именно это они и делают: повторно выполняют слияние, запустив git merge
.
squa sh и операции исправления, которые выполняет git rebase
, эквивалентны, более или меньше, чтобы использовать git commit --amend
(а в старом интерактивном сценарии оболочки на самом деле запускал git commit --amend
). Но git merge
не имеет эквивалента --amend
: Git просто не знает, как это сделать.
При использовании новой опции -r
вы должны иметь возможность отбрасывать слияние, если вы хотите просто его опустить; или, если вы хотите превратить его в squa sh -not-really-a-merge, вы можете заменить команду merge
соответствующей командой exec git merge --squash
. По-прежнему потребуется вторая интерактивная -r
перебазировка в squa sh итоговую фиксацию в более раннюю.