Отмена некоторых слияний / фиксаций, но сохранение некоторых - PullRequest
0 голосов
/ 04 июля 2019

У меня плохое слияние, за которым последовала пара хороших коммитов. Я попытался отменить неудачное слияние, однако я не хочу потерять эти изменения (т.е. я не хочу дальнейший коммит, который отменяет изменения), я просто не хочу, чтобы они были в моей ветке.

Так что мой журнал выглядит примерно так:

7975c057 | Reverts bad merge
40a01d2f | Good commit
3b2c3825 | Good commit
1f3f1858 | Bad merge - code shouldnt be in this branch
37f71a89 | Good commit
... (more good commits...)

Как мне удалить 1f3f1858 | Bad merge и 7975c057 | Reverts bad merge из моей ветки?

1 Ответ

1 голос
/ 04 июля 2019

Отменить коммит слияния сложно, потому что у слияния есть два родителя, и можно следовать путем только одного родителя. При использовании интерактивной перебазировки вам, как правило, придется полностью повторить слияние. По этой причине я мог бы предложить следующую стратегию:

git checkout -b good_branch 37f71a89    # create new branch from 37f71a89
git cherry-pick 3b2c3825                # cherry-pick first good commit
git cherry-pick 40a01d2f                # cherry-pick second good commit

Это оставило бы вас с требуемой структурой ветвления, хотя у двух "хороших" коммитов фактически были бы новые значения хеш-функции SHA-1, потому что вишня-сбор всегда создает новый коммит (хотя коммиты будет функционально идентичен их оригинальным аналогам).

...