如何删除GIT中的合并之间的中间合并?
-
11-10-2019 - |
题
我想删除合并中间的合并(删除,而不是南瓜),然后将最后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
要取出与分支t的合并,然后做一个 git branch newone
和 git reset --hard HEAD^2
将最后2个提交转移到新分支。但是,当我做出重新观察时,它向我展示了tade分支的所有提议,这些分支合并为师父和|不愿删除它们。
有更好的方法还是我应该继续前进?
编辑:我更新了预期的状态图,以使其更加清晰。 2个新提交(aaaaaaa
和 bbbbbbb
)只能在那里更好地说明国家(我希望)
解决方案
使用互动重新构造来重新恢复 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
不隶属于 StackOverflow