Как убрать промежуточное слияние в 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