Git: отменить коммит слияния, но сохранить сохранить последующие коммиты (после удаления коммит слияния) - PullRequest
0 голосов
/ 15 мая 2019

Две недели назад ветвь 'branch-one' (которая была создана два месяца назад и содержала много старого кода) слилась с 'master', и этот коммит имеет имя 'commit123'. После объединения команда работала и совершила много коммитов. Необходимо удалить это слияние, но сохранить последующие коммиты.

Я вижу решение: отменить коммит слияния, после добавления с помощью cherry-pick последующие коммиты, но это долгое решение.

Кто-нибудь может предложить много оптимистичного и краткого решения?

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Если , у вас нет проблем с переписыванием истории, избавьтесь от слияния в истории и переиграйте историю после нее. Давайте назовем эту ревизию merge-rev

git checkout merge-rev~1 # right before the revision you want to get rid of
git cherry-pick merge-rev..master # linear history between merge and master (not including the merge you want to get rid). Adjust if the branch is not master
# if you like the results
git branch -f master
git push -f some-remote master # if you need to push somewhere to replace the old branch

Предполагается, что история является линейной после слияния, от которого вы хотите избавиться.

0 голосов
/ 15 мая 2019
$ git fetch
$ git checkout commit123 # the merge revision you want to get rid of
$ git reset --soft <the-commit-on-master-before-the-merge>
$ git commit -m 'squashed commit123'
$ git checkout origin/master
$ git revert <squashed-commit123>

В сдвоенном коммите есть то же самое содержание, что и в слиянии, но его легче восстановить в мастере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...