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

标签 git

我有一个分支 B 基于分支 master,我想将 B rebase 到分支 A .

我的问题是分支 A 是基于 master 中比 B 更早的提交,所以当我尝试 rebase B A 上,它带来了 master 的所有提交历史,因为 A 从中分离出来。

通常我会通过交互式 rebase 来解决这个问题并手动删除不需要的提交,但是在这种情况下,有太多的提交无法通过这种方式处理。我想要的是一个命令,它允许我删除分支 B 中的所有提交,它是 A 的最后一个共同祖先和 master 的提示.

即。从分支 B

删除下图中的提交 2-5 的命令
* 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

最佳答案

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

git switch B
git rebase --onto A master

这会将 B 的提交写入 A,从 Bmaster< 之间最近的共同提交的子项开始.

关于git - 如何在没有交互式 rebase 的情况下删除两次提交之间的所有提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64928771/

相关文章:

jquery - 如何忽略 Bower 中的源文件

git branch 在 pull 时不断地重新创建

git - 如何将 git 存储库的 COPY(存档,而不是克隆)连接到其远程?

linux - 将 Docker 镜像中的用户切换为非 root 用户

python - pip install 在 OpenShift 中失败,错误信息为 Permission Denied

android - git .gitignore 不忽略以前跟踪的文件

git - Git 是否可以永久在同一个子分支上工作?

git - 如何为特定的一组提交创建多个 PR

git - 是否可以 merge 从同一 CVS 源导入的不相交的 Git 存储库?

eclipse - EGit:无法推送,无法 pull