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

How to extend work on a branch in Git

我创建了分支 A,它在合并到主分支之前正在接受扩展审查。

在审查开始时,我需要创建分支 B,它建立在分支 A(此时已冻结)的工作之上。

如下所示:

git checkout branchB
git rebase branchA

我们的工作流通常让我们变基到 master,然后进行交互式变基以将我们的提交压缩为一个干净的提交以合并到 master。

问题是 branchB 将无法在交互式变基(和必要的 push -f)之后变基到 branchA,而没有不必要的合并冲突。如果我理解正确的话,branchB会在我强行推送branchA时失去它的后代历史。

是否有其他方法可以在这样的分支上进行构建,从而避免后续出现不良合并冲突?

在从 master 变基之前,您需要将 branchB 合并到 branchA。

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

branchB 变基到压扁的 branchA 不应导致任何合并冲突。变基 branchB 中的合并冲突仅应由在 branchA 的初始 rebasemaster.

中发生的任何合并冲突解决方案引起

您可以执行交互式 rebase 压缩 branchA,然后再将其变基到 master。然后将 branchB 变基到新压缩的 branchA,然后将剩余的单个 branchA 提交推送到远程 master。这只会让您在单个变基中解决任何合并冲突。

您真的可以在分支 B 上通过几个步骤完成所有操作:

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

create branch B which builds on the work in Branch A

git branch -t branchB branchA

(请参阅 git branch 文档了解如何在已创建的分支上设置 uptreams)。

在对 branchA 进行变基后,正确地对签出的 branchB 进行变基的命令是

git rebase

Git 默认情况下自动跟随上游 rebases,如果你遇到它自己找不到合适的分叉点(参见 rebase 文档)的情况,post 一个问题关于那种情况,请提供具体、具体的细节?