2

我想删除中间合并(删除,而不是 squash),然后将最后 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 -itade 删除与分支的合并,然后执行 agit branch newone并将git reset --hard HEAD^2最后 2 个提交移动到新分支。但是,当我进行 rebase 时,它​​向我显示了来自 tade 分支的所有提交,这些提交合并到了 master 和 | 不愿意删除它们。

有没有更好的方法或者我应该继续它?

编辑:我更新了预期的状态图以使其更加清晰。2个新的提交(aaaaaaabbbbbbb)只是为了更好地说明状态(我希望)

4

1 回答 1

1

使用交互式变基来变基3a5c453be356d0不是合并提交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
于 2011-01-16T18:34:56.003 回答