Ответ 1
Git не позволяет выполнять интерактивные переустановки при включении слияний. Опция -p
использует механизм -i
внутри, поэтому смешивание двух не работает.
Тем не менее, git rebase
- это просто автоматизированный способ сделать много вишнёв. Вы можете реплицировать свое поведение путем ручной вишни, чтобы получить немного больше контроля над процессом. Это менее удобно и подвержено человеческой ошибке, но возможно.
Это подход, который я предлагаю:
- используйте
git rebase
, чтобы перейти к фиксации после слияния (дочерний элемент слияния) - используйте
git reset --hard HEAD^
, чтобы вручную перейти к слиянию - используйте
git commit --amend
для восстановления слияния - используйте
git cherry-pick
, чтобы вернуться к фиксации после слияния - используйте
git rebase --continue
для завершения
Ниже приведены конкретные шаги:
- Обратите внимание на идентификатор SHA1 слияния, которое вы хотите изменить. Для обсуждения предположим, что это
deadbeef
. - Обратите внимание на идентификатор SHA1 для фиксации сразу после фиксации слияния, которую вы хотите изменить (дочерний элемент слияния). Предположим, что это
facef00d
. - Запустите
git rebase -i deadbeef
. - Выберите
facef00d
для редактирования. - Когда rebase возвращает вас к приглашению для редактирования
facef00d
, запуститеgit reset --hard HEAD^
. Теперь вы должны быть вdeadbeef
(git rev-parse HEAD
должен печататьdeadbeef
). - Внесите свои изменения, чтобы исправить конфликт с неправильным слиянием и используйте
git add
для их создания. - Запустите
git commit --amend
, чтобы заблокировать поэтапное исправление с неудачной фиксацией слияния. Теперь результат будет иметь другой SHA1 (неdeadbeef
). - Запустите
git cherry-pick facef00d
, чтобы применить изменения, сделанныеfacef00d
к фиксации с фиксированным слиянием. - Запустите
git rebase --continue
для завершения.