【问题标题】:Git rebase feature branch messes up commits in pull request to develop/master branchGit rebase 功能分支搞乱了对开发/主分支的拉取请求中的提交
【发布时间】:2020-05-02 00:15:19
【问题描述】:

我有以下场景:

  • 主分支:生产中的内容,可以包含修补程序
  • Develop-branch:我的开发人员用来创建拉取请求的分支
  • feature-branches:我们为开发人员正在实施的功能创建的分支。

开发人员完成工作后,会在开发分支上创建拉取请求。批准后,我们​​将特性分支压缩合并到开发分支上,以便不包括开发人员在特性分支上所做的所有提交。这使我们可以在开发分支上拥有清晰干净的 git 历史记录。

有时功能分支需要从开发分支进行变基,这就是麻烦开始的地方。当我们用开发分支变基功能分支时,突然间很多来自开发分支的提交都包含在拉取请求。

如何避免这种情况,以便 PR 只包含来自功能分支的实际提交?

【问题讨论】:

  • 哪个分支是在其生命周期开始时创建的功能分支? masterdevelop是什么关系?即master 是否稍微落后于develop,但其他方面是否相同?除了功能分支,还有其他分支对develop 有贡献吗?
  • @Pesho_T master 分支确实稍微落后于开发,因为开发可能包含尚未发布的功能。同样,主分支可以包含需要尽快修复的错误的修补程序。发生这种情况时,我们会立即使用 master 分支重新定位开发分支,以便这些修复也可以在开发分支中使用。希望这是有道理的?

标签: git git-merge git-rebase git-squash feature-branch


【解决方案1】:

我怀疑这发生在您在发布修补程序后从 master 重新开发基础后。

考虑以下场景:

master   A->B->C
                \
develop          D
                  \
feature A          E

然后,您会在 master、F 中获得一个修补程序,然后将 develop 重新设置为基础。变基创建了一个具有不同哈希的“新”提交(D'),因此从 git 的角度来看,D 和 D' 是两个独立且不相关的提交。 D 仍然存在,C 是它的父级,但它不再在 develop 上 - 仅在 feature A 上:

master   A->B->C->F
                \  \
develop          \  D'
                  \
feature A          D->E

因此,如果您尝试 rebase feature A off develop,如果您不进行交互式 rebase,git 将无法识别 D 和 D' 是相同的提交,您将最终得到以下结果:

master   A->B->C->F
                   \
develop             D'
                     \
feature A             D->E

为了解决这个问题,当从 develop 变基 feature A 时,以交互方式执行并告诉 git 删除 D,因为你知道它与 D' 相同。

【讨论】:

  • 下次我们在这种情况下运行时,我会尝试一下。与此同时,我会接受这个答案。谢谢!
  • 将master合并到开发而不是rebase不是更好,以免重写公共历史吗?
  • 或者创建一个 higfix bench 合并到两者中,然后在你发布时使用 master 然后 rebase 来开发(因此创建新的 master)?
  • @IanRingrose 将 master 合并到 develop 会变得混乱 - 每次合并都会创建一个合并提交,当需要将完成的功能添加到 master 时,它将返回到 master发布。 OP 说他们希望在开发分支上有一个干净的历史记录,主观上合并提交不会产生干净的历史记录。您的第二条评论更有趣,我认为我在一条评论中没有足够的字符来描述其不足之处,但鉴于 OP 的 git 工作流程的可用详细信息,它仍然不合适。
  • @IanRingrose Here 是一篇对 GitFlow 有不同看法的帖子。它讨论了合并如何污染您的历史,并使其成为一场噩梦。
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 2016-10-09
  • 2013-07-25
  • 1970-01-01
  • 2021-07-26
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多