Как удалить промежуточное слияние в git? - PullRequest
2 голосов
/ 16 января 2011

Я хочу удалить промежуточное слияние (удалить, а не сквош), а затем переместить последние 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 для удаления слияния с ветвью ветвления, а затем сделал git branch newone и git reset --hard HEAD^2, чтобы переместить последние 2 коммита в новую ветвь. Когда я сделал ребаз, он показал мне все коммиты из ветки тейда, которые были объединены с мастером и | неохотно удалял их.

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

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

1 Ответ

1 голос
/ 16 января 2011

Используйте интерактивный перебазирование, чтобы перебазировать 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
...