git - 使用 develop 分支 Git 流程开发模型应用修补程序时,如何避免 Git 中的重复提交?

标签 git gitlab branch git-merge branching-and-merging

我们在我们的一个项目中使用了 develop 分支开发模型。

o - - - A - o - o - o - o  master
| \   /
 \  o  hotfix1
  \   \
    o - B - o - o - o develop

在上图中,hotfix1 是必需的,我们在 masterdevelop 分支中应用( merge )它。这导致 2 个不同的提交 ID A 和 X。

稍后我们需要一个新的修补程序,它再次应用于 master 导致提交 C:

o - - - A  ...  A - - - C  master
| \   /           \   / 
 \  M  hotfix1       N  hotfix2
  \   \               \
    o - X - o - o - o - ?(A, N)? develop

但是将 hotfix2 merge 到 develop 分支中,我们在 merge 请求(GitLab 术语)中得到以下提交列表:

N
A

这有几个缺点:

  • 代码审查者将看到比提交 N 中更多的更改,即使所有这些更改已经在 develop 中(通过提交 X)。这使得审查变得更加复杂。
  • merge 后,在 develop 中我们看到 X 和新引入的 A(通过 merge N)。像这样,我们在两个不同的提交中有相同的更改和相同的 git 提交消息 (git log)。

我们如何避免在 masterdevelop 中重复提交?我们想继续使用 develop 分支模型。

最佳答案

您可以挑选 (git cherry-pick <commitHash>) 包含修复的提交,而不是在开发中 merge 修补程序(分支),它将创建以下内容:

o - - - A  ...  A - - - C  master
| \   /           \   / 
 \  M  hotfix1       N  hotfix2
  \   \
   o - X - o - o - o - N' develop

N' 将具有与 N 相同的内容,但父级不同,因此哈希值不同,而且,没有相同的父级意味着在您的 merge 请求中,A 将不存在。

关于git - 使用 develop 分支 Git 流程开发模型应用修补程序时,如何避免 Git 中的重复提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538770/

相关文章:

git - 为什么 Gitlab 无法从本地网络导入存储库,状态码为 128?

gitlab - gitlab服务器中的负载均衡

mercurial - 如何对 Mercurial 中的先前标签提交错误修复?

git - 如何在 git 中列出包含另一个分支的分支

Mercurial:如何从存储库中仅导入部分变更集?

git - Elastic Beanstalk、Git 和 AWS 工具 : How to clone repository to another workstation

git - 无法使用 visual studio 2013 pull git 中的更改?

docker - 从 GitLab CI 运行器连接到 docker-in-docker

git - 无法从 gitlab 克隆项目

javascript - 使用 webhooks 将 Github 版本部署到 Node 服务器