我想删除中间合并(删除,而不是压缩),然后将最后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次提交移动到新分支。当我做了rebase时,它向我展示了来自tade分支的所有提交已合并为master和|他们不愿意删除它们。
有没有更好的方式或者我应该继续使用它?
编辑:我更新了预期的状态图以使其更清晰。 2个新提交(aaaaaaa
和bbbbbbb
)只是为了更好地说明状态(我希望)
答案 0 :(得分: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