我创建了分支A,在合并到master之前正在经历扩展审查。
在审查开始时,我需要创建分支 B,它基于分支 A 中的工作(此时已冻结(。
这如下所示:
git checkout branchB
git rebase branchA
我们的工作流程通常让我们变基到 master,然后执行交互式变基,将我们的提交压缩到一个干净的提交中,以便合并到主节点中。
问题变成了,在没有不必要的合并冲突的情况下,交互式变基(和必要的push -f
(之后,branchB
将无法变基到branchA
。如果我理解正确,当我强制推送branchA
时,branchB
将失去其后代历史.
有没有另一种方法可以在这样的分支上进行构建,以避免糟糕的合并冲突?
branchB
变基到压扁的branchA
上不会导致任何合并冲突。 变基branchB
中的合并冲突应仅产生于在branchA
master
的初始rebase
中发生的任何合并冲突解决。您可以执行交互式rebase
来挤压branchA
,然后再将其重新定位到master
上。 然后将branchB
变基到新压扁的branchA
上,然后将剩余的单个branchA
提交推送到远程master
。 这只允许您在单个变基中解决任何合并冲突。
您实际上只需在分支B上通过几个步骤即可完成所有操作:
-
git rebase -i origin/master
<-- 压缩所有分支 A 提交,但不压缩分支 B 提交 -
git push origin <hash of single squashed branchA commit>:master
通常,在合并到该分支之前,从另一个分支变基应该是您做的最后一件事。 在您准备好合并之前,变基没有真正的好处。
创建分支 B,它建立在分支 A 中的工作之上
是
git branch -t branchB branchA
(有关如何在已创建的分支上设置 uptreams 的信息,请参阅 git branch
文档(。
在对分支 A 变基后,正确重定已签出分支 B 的命令是
git rebase
Git 会自动遵循上游变基,默认情况下,如果您遇到一些情况,它本身找不到合适的分叉点(请参阅变基文档(,请发布有关这种情况的问题,并提供具体、具体的细节?