Конвертировать слияние в rebase без необходимости повторного слияния

Я допустил ошибку: я должен был использовать git pull --rebase, но я выпустил простой git pull, объединил все и теперь получил слияние в HEAD моей ветки.

Я хочу избавиться от этого коммита слияния, и я подумал, что я просто выпустил git rebase -i HEAD~3, переместил бы мой последний локальный коммит на верх и раздавил в него слияние. Увы, слияние не доступно для раздачи. Если я это сделаю, я попадаю в промежуточные состояния, где мне нужно снова слить, что очень много.

Есть ли выход из этого без необходимости повторного слияния? Кажется, должно быть возможно каким-то образом использовать фиксацию слияния?

Ответы

Ответ 1

TL;DR

Даже если вы можете включить комманды слияния в rebase, вы не можете выполнить компромисс слияния. Git сообщит вам, говоря:

Отказ от склеивания слияния: < SHA-1 >

Что вы можете сделать, чтобы сохранить изменения, сделанные во время слияния, - это преобразовать комманду слияния в обычную фиксацию. В этот момент вы можете раздавить его, как и любое другое сообщение.

Предполагая, что HEAD указывает на фиксацию слияния:

git reset --soft HEAD~1  # Keeps changes in the index
git commit               # Create a new commit, this time not a merge commit
git rebase -i HEAD~4     # Do an interactive rebase and squash the new commit

Сохранение слияния завершается во время rebase

В общем, вы можете сохранять коммиты слияния при выполнении переадресации с помощью git rebase -p.
Однако его цель состоит в том, чтобы воспроизвести коммиты, ведущие к слиянию. Любые изменения, которые являются частью слияния, фиксируются (например, разрешения конфликтов), не сохраняются.

Здесь из документации:

-p
- сохраняющие-слияния
Повторное создание слияния совершает вместо того, чтобы сплющить историю путем повторного воспроизведения, объявляет о слиянии. Объединить конфликт резолюции или поправки вручную для слияния коммитов не сохраняются.
Это использует механизм --interactive внутри, но комбинируя его с опцией --interactive явно не является хорошей идеей если вы не знаете, что делаете (см. ОШИБКИ ниже)

bug документация ссылается на инициируется путем переупорядочения коммитов.