Как убрать промежуточное слияние в git?

Я хочу удалить промежуточное слияние (удалить, а не сквош), а затем переместить последние 2 коммита в новую ветку.

Это мой ток git log --graph:

* 3a5c453 - (2 hours ago) last commit (HEAD, master)
*   b6c19f1 - (2 hours ago) Merge branch 'tade' into HEAD
|\  
* | be356d0 - (2 hours ago) previous commit
| * 65328dc - (3 hours ago) some other commit in branch tade

Я хочу закончить с этим:

    * bbbbbbb - (some time in the future) a later commit on tade (tade)
*   | aaaaaaa - (some time in the future) a later commit on master (master)
| * | 3a5c453 - (2 hours ago) last commit (HEAD, newone)
| * | be356d0 - (2 hours ago) previous commit
|/  |
|   * 65328dc - (3 hours ago) some other commit in branch tade

Я думал об использовании git rebase -i удалить слияние с веткой Tade, а затем сделать git branch newone а также git reset --hard HEAD^2 переместить последние 2 коммита в новую ветку. Когда я сделал ребаз, он показал мне все коммиты из ветки tade, которые были объединены с master и | неохотно удалял их.

Есть ли лучший способ, или я должен пойти дальше?

РЕДАКТИРОВАТЬ: я обновил график предполагаемого состояния, чтобы сделать его более понятным. 2 новых коммита (aaaaaaa а также bbbbbbb) только там, чтобы проиллюстрировать состояние немного лучше (я надеюсь)

1 ответ

Решение

Используйте интерактивный перебазирование, чтобы перебазировать 3a5c453 на be356d0 вместо коммита слияния b6c19f1 (т.е. просто переместите 3a5c453 совершить одно) Тогда у вас должно быть что-то вроде этого:

*   xxxxxxx - (2 hours ago) Merge branch 'tade' into HEAD
|\  
* | yyyyyyy - (2 hours ago) last commit (HEAD)
* | be356d0 - (2 hours ago) previous commit
| * 65328dc - (3 hours ago) some other commit in branch tade

Тогда вы можете просто создать новые ветви:

git checkout -b newbranch yyyyyy

Тогда вы можете удалить xxxxxx и передайте что-нибудь мастеру и в конечном итоге это:

* zzzzzz - new commit on master
| * | yyyyyyy - (2 hours ago) last commit (HEAD)
| * | be356d0 - (2 hours ago) previous commit
| | * 65328dc - (3 hours ago) some other commit in branch tade
Другие вопросы по тегам