GitFlow,压制和合并问题

问题描述 投票:0回答:1

我用的是 GitFlow 在我的 git 仓库中,所以我有一个 master, develop 和(临时) release 分公司。

工作流程

  1. 我创建了一个新的分支,从 develop (例如 fix/fix-the-bug)
  2. 我把我的修行压制在有意义的承诺中。
  3. 我合并了我的 fix/fix-the-bug 分为 develop
  4. 一旦我合并了足够多的分支,我就会创建一个(临时的)。release/x.y.zdevelop
  5. 我在 release/x.y.z 分支并标记该提交
  6. 当我想合并 release/x.y.z 变成 master,我得到合并冲突。好像是 master 不明白提交已经存在于 master
  7. release/x.y.z 分支被并入 develop
  8. 我删除 release/x.y.z

有几件事要注意,不知道是否都正确。

  • 当我把我的提交合并到主目录时,我把我的提交压成了一个提交。
  • 应该有一个git标签在 master 表示版本号,但不知道如果我把提交的内容压扁,这样做是否正确。

疑问

我现在想知道,

  • 我如何才能修复我的回购,因为我认为我不应该得到这些冲突。
  • 任何关于工作流程的进一步建议(例如,我可以在哪个部分进行最好的压制)将受到欢迎。
git merge git-flow git-merge-conflict squash
1个回答
1
投票

合并到主分支时,我将我的提交压缩成一个提交。

听起来你用的是 git merge --squash 当你合并到 master. 这不是gitflow的标准做法,你只需要做一个普通的合并。

普通合并和压扁合并的区别在于,压扁合并并不记录合并到的分支上的新提交与源分支上的原始提交之间的关系。master 和源分支上的原始提交之间的关系;这就是为什么后续的合并并不理解在 master 已经对应于以前的状态 develop.

使用常规合并的 "缺点 "是,当记录时,git的默认输出是 master 例如,将包括所有的individaul提交,而不仅仅是发布在 master; 但你可以通过使用 --first-parent 选项。

为了将其可视化,你需要从一个空白的repo开始

o <--(master)

在没有创建提交的情况下,您可以启动 develop 枝,然后是 fix 所属部门

o <--(master)(develop)
 \
  A <--(fix)

你合并到开发

o <--(master)
|
|- M <--(develop)
\ /
 A <--(fix)

你可能会做更多的修复

o <--(master)
|
|- M - M2 <--(develop)
| / \ /
| |  B <--(fix2)
\ |
 A <--(fix)

现在,如果你将合并压制到主控,你会得到这样的东西。

o -------- AB <--(master)
|
|- M - M2 <--(develop)
| / \ /
| |  B <--(fix2)
\ |
 A <--(fix)

AB 包含了所有的变化 AB 介绍,但就git而言,那是巧合;而一旦 develop 含有额外的改动,即使是 "相同 "的改动也会丢失,并导致冲突(如你所经历的)。

所以,你应该做一个常规的合并--只需省掉 --squash 选项,假设您一开始就使用了 squash merges。

o ------- AB <--(master)
|        /
|- M - M2 <--(develop)
| / \ /
| |  B <--(fix2)
\ |
 A <--(fix)

这就是git对合并的工作方式;现在,未来的合并尝试将 "知道" M2 (以及它所包含的一切)已经包含在 master 而只有在 M2 将作为 "他们的changs "包含在合并计算中。

这也是 gitflow 的意图。

© www.soinside.com 2019 - 2024. All rights reserved.