我有以下仓库:
A--B--C--D--E--F--G--H--I--J
\
K--L--M
main -> J
DEV -> M
我想压缩 B 和 E 之间的提交,因此 repo 看起来像这样:
A--N--F--G--H--I--J
\
K--L--M
main -> J
DEV -> M
我尝试做一些交互式的挤压,但是我得到的最好的结果是这样的:
N--F'-G'-H'-I'-J'
/
A--B--C--D--E--F--G--H--I--J
\
K--L--M
remote/main -> J
main -> J'
DEV -> M
因此 DEV 分支并没有附加到它应该在的位置。
有什么办法可以做到这一点?
--rebase-merges
在顶部进行一次性合并提交后,您可以使用交互式操作:我们构建了这个历史:
使用
合并结果(
X
)无关紧要,因为我们无论如何都会将其丢弃。使用合并策略ours
可确保合并命令成功。现在你可以进行交互式 rebase 了:
B
在“todo”脚本中,指定to的压缩E
并删除最后一行的合并命令,如下所示:--updated-refs
确保将分支DEV
重新放置在重写的侧分支之上。您需要 Git 版本 2.38 才能实现此目的。如果您的版本较旧,请放弃该选项并手动重新放置分支标签。git rebase
顺便说一句,准备重建的脚本提交B
到G
“侧”分支DEV
。这一定不会让你感到惊讶:提交就在那个分支上。