假设我有一个 MR - 合并branch1
到main
branch1
并调用它branch2
。branch2
依赖于branch1
s 的变化,但对于它自己的分支来说已经足够大了。branch1
被 squash 合并到main
.branch2
并main
注意到我的变基正试图包含来自branch1
我只是跳过这些提交吗?我是否在寻找除变基以外的其他东西?如果有人问过这个问题,我很抱歉 - 我试图找到答案,但不确定搜索它的最佳方法。
我将 branch2 重新设置到 main 上,并注意到我的 rebase 正在尝试包含来自 branch1 的所有提交
然后你做错了rebase。不幸的是,您没有显示您使用的命令,但您可能说git rebase main
. 那是错误的!正确的语法是:
git rebase --onto main branch1 branch2
这正是您想要的:它剪断了仅分支 2 的提交,并将它们推到main
.
要理解为什么你做错了,你需要意识到 Git 不会像你那样考虑分支。假设你有这个:
A -- B -- C -- D (main)
\
W -- X (branch1) -- Y -- Z (branch2)
你可能认为 branch2 只是 Y 和 Z。但是对于 Git,branch2 只是 Z 的一个名字。所以它必须决定在 rebase 开始时在哪里剪断,并且在没有其他信息的情况下,它将决定从 W 开始剪断。我向你展示的语法告诉它从 Y 开始剪断。
然而,这并没有告诉你现在该做什么来摆脱在你不正确的 rebase 结果中出现的提交 W 和 X:
A -- B -- C -- D (main) -- W -- X -- Y -- Z (branch2)
[WRONG!]
答案是git rebase -i main
。这是一个交互式变基,你可以从它给你的列表中删除 W 和 X。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句