Git rebase 功能分支搞乱了对 develop/master 分支的拉取请求中的提交
Git rebase feature branch messes up commits in pull request to develop/master branch
我有以下场景:
- 主分支:正在生产中,可以包含修补程序
- Develop-branch:我的开发人员用来创建拉取请求的分支
- feature-branches:我们为开发人员正在实现的功能创建的分支。
开发人员完成工作后,他会在开发分支上创建拉取请求。批准后,我们将功能分支压缩合并到开发分支,以便不包括开发人员在功能分支上所做的所有提交。这允许我们在开发分支上有一个清晰干净的 git 历史。
有时功能分支需要开发分支的变基,这就是麻烦开始的地方。当我们用开发分支变基功能分支时,突然间包含了很多来自开发分支的提交在拉取请求中。
如何避免这种情况,使 PR 仅包含来自功能分支的实际提交?
我怀疑在修补程序发布后从 master 变基 develop 后会发生这种情况。
考虑以下场景:
master A->B->C
\
develop D
\
feature A E
然后您会在 master
、F 中获得一个修补程序,然后将其变基 develop
。 rebase 使用不同的哈希创建 "new" 提交 (D'),因此从 git 的角度来看,D 和 D' 是两个独立且不相关的提交。 D 仍然存在,C 是它的父级,但它不再位于 develop
- 仅位于 feature A
:
master A->B->C->F
\ \
develop \ D'
\
feature A D->E
因此,如果您随后尝试将 feature A
变基到 develop
,如果您不进行交互式变基,git 将无法识别 D 和 D ' 是相同的提交,您将得到以下结果:
master A->B->C->F
\
develop D'
\
feature A D->E
为了解决这个问题,当从 develop
变基 feature A
时,以交互方式进行并告诉 git 删除 D
,因为你知道它与D'.
我有以下场景:
- 主分支:正在生产中,可以包含修补程序
- Develop-branch:我的开发人员用来创建拉取请求的分支
- feature-branches:我们为开发人员正在实现的功能创建的分支。
开发人员完成工作后,他会在开发分支上创建拉取请求。批准后,我们将功能分支压缩合并到开发分支,以便不包括开发人员在功能分支上所做的所有提交。这允许我们在开发分支上有一个清晰干净的 git 历史。
有时功能分支需要开发分支的变基,这就是麻烦开始的地方。当我们用开发分支变基功能分支时,突然间包含了很多来自开发分支的提交在拉取请求中。
如何避免这种情况,使 PR 仅包含来自功能分支的实际提交?
我怀疑在修补程序发布后从 master 变基 develop 后会发生这种情况。
考虑以下场景:
master A->B->C
\
develop D
\
feature A E
然后您会在 master
、F 中获得一个修补程序,然后将其变基 develop
。 rebase 使用不同的哈希创建 "new" 提交 (D'),因此从 git 的角度来看,D 和 D' 是两个独立且不相关的提交。 D 仍然存在,C 是它的父级,但它不再位于 develop
- 仅位于 feature A
:
master A->B->C->F
\ \
develop \ D'
\
feature A D->E
因此,如果您随后尝试将 feature A
变基到 develop
,如果您不进行交互式变基,git 将无法识别 D 和 D ' 是相同的提交,您将得到以下结果:
master A->B->C->F
\
develop D'
\
feature A D->E
为了解决这个问题,当从 develop
变基 feature A
时,以交互方式进行并告诉 git 删除 D
,因为你知道它与D'.