如何在没有交互式变基的情况下删除两次提交之间的所有提交

Jos*_*osh 1 git

我有一个B基于分支的分支master,我想改用B分支A

我的问题是分支A是基于关闭较早的承诺masterB,所以当我尝试和重订BA它把所有提交的历史master,因为A是从它分裂。

通常我会通过交互式 rebase 来解决这个问题并手动删除不需要的提交,但是在这种情况下,以这种方式处理的提交太多。我要的是一个命令,让我放弃分支所有提交B它与最后的共同祖先之间A和尖端master

IE。从分支删除下图中的提交 2-5 的命令B

* 099b4f7 (HEAD -> master) commit_6
| * a4b6a50 (B) some other commit
|/  
* 80cfbbc commit_5
* 49c40c9 commit_4
* 2923714 commit_3
* f78ee3c commit_2
| * f6d3601 (A) some commit
|/  
* df753e1 commit_1
Run Code Online (Sandbox Code Playgroud)

Cal*_*pin 5

这正是该--onto选项rebase适用的情况:

git switch B
git rebase --onto A master
Run Code Online (Sandbox Code Playgroud)

这将写B的提交到A从孩子的最新共同的承诺之间开始Bmaster