将功能分支更新到新基础的最佳做法是什么?

What is best practice for updating feature branches to a new base?

我使用 git 流程,我对分支制作功能分支时的最佳实践有疑问。如果我有一个开发主分支和两个功能分支,一个在时间 t2 分支,另一个在时间 t3 分支,如果两个功能分支都没有准备好合并并且需要开发分支或其他功能的新东西,应该怎么办分支?当开发完成了一些新的事情时,有没有一种方法可以将功能 1 的 "base" 从 t2 的开发更新为 t3 的新开发 "base"?类似地,对于功能分支 2,当它还没有准备好合并时,是否可以在合并之前使用开发分支的新更改对其进行更新?

                         feature 1 (branch)
                        /
                       /  
    ----- develop ----/-----\---------------------------
                             \
                              \
                              feature 2 (branch)
    t1              t2     t3                      t4

分支能否以某种方式 "moved forward" 以便开发分支中的新更改包含在功能分支中,或者我们是否有必要先合并?

虽然您可以通过变基来推动它们向前发展,但我只会将开发合并到功能分支中。在处理功能分支时,无论如何我都会定期将开发合并到其中,以防止在我最终将功能分支合并回开发时发生巨大的合并冲突。

您可以在feature中合并您想要的develop分支点。

如果您只需要一些特定的提交,您可以使用 git cherry-pick 将这些提交的更改应用到您的分支。

我想补充现有的两个答案:除了在 feature 分支中合并 develop,您还可以在更新后的 develop 上重新设置每个 feature 分支的基线] 分支机构:

git checkout feature
git rebase develop

优点:

  1. 历史变得更加清晰,因为您避免了合并提交,例如 Merge branch develop into feature,这在您稍后将 feature 合并到时可能会造成混淆develop
  2. 此外,您可以轻松更改 feature 分支中的提交(例如,如果您想修复提交消息中的错字),而无需更改 develop 分支中已有的提交。如果你将 develop 合并到 feature,这就不再可能了,因为分支会分叉,你不能再将 feature 合并到 develop.

所以这种方法稍微多一些工作(变基而不是合并),但也带来了一些(次要)优势。