【发布时间】:2012-12-23 15:52:33
【问题描述】:
我们刚刚从 Subversion 切换到 Git。
今天早上出现的问题是,我们从一个分支中挑选了一个提交到 master 中,这样 maser 就会修复错误。然后我们将master合并回分支。
当我们尝试编译时,所有来自精心挑选的提交的添加都在代码中出现了两次。
精心挑选的提交包括添加几行代码,最终在代码中出现两次。幸运的是,它们是完整的函数,因此会引发编译器错误。
从未引发过冲突。
我们如何避免这种情况。这是个大问题。
谢谢。
【问题讨论】:
-
您应该尝试类似
git-flow的工作流程。 (解释:nvie.com/posts/a-successful-git-branching-model 工具:github.com/nvie/gitflow)在这种情况下,“正确”的方法是为旧代码中的错误创建一个新分支(而不是在功能分支上开发的那个)并合并它进入 master 和 feature 分支 - 然后 git 可以正确跟踪提交。 -
@millimoose 那个 nvie 工作流程似乎并不适用于所有情况。开发分支似乎对持续交付不太友好。
-
不幸的是,樱桃采摘有时是唯一的答案。很多时候我们会发现一个影响所有分支的错误,我们需要将修复放在所有分支中,但我们不希望任何分支的其他更改。这就是樱桃采摘存在的原因。
-
@ArtB 我承认我对模型的练习很有限,它在 OP 的情况下似乎很合适。 “对持续交付不友好”是什么意思?大概您仍然希望新功能通过某种集成过程,如果我理解正确的解释
develop主要是这样做的地方,而功能分支对组来说是“私有的”。或者换一种说法,你不会对“私人”代码进行 QA。 (尽管对于没有专门 QA 的小型应用程序来说,整个模型显然是多余的。) -
@JamesBaker 如果 bug 影响所有分支,那么您可以将 bugfix 分支基于它们的共享祖先,然后将该分支合并到所有分支中。
标签: git merge commit duplication cherry-pick