如何在 Git 中扩展分支的工作



我创建了分支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上通过几个步骤即可完成所有操作:

  1. git rebase -i origin/master <-- 压缩所有分支 A 提交,但不压缩分支 B 提交
  2. git push origin <hash of single squashed branchA commit>:master

您需要将分支 B 合并到分支 A 上,然后再重新定位主。

通常,在合并到该分支之前,从另一个分支变基应该是您做的最后一件事。 在您准备好合并之前,变基没有真正的好处。

创建分支 B,它建立在分支 A 中的工作之上

git branch -t branchB branchA

(有关如何在已创建的分支上设置 uptreams 的信息,请参阅 git branch 文档(。

在对分支 A 变基后,正确重定已签出分支 B 的命令是

git rebase

Git 会自动遵循上游变基,默认情况下,如果您遇到一些情况,它本身找不到合适的分叉点(请参阅变基文档(,请发布有关这种情况的问题,并提供具体、具体的细节?

最新更新