2014-01-06 171 views
0

是git的新手,我有这个愚蠢的问题 - 使用功能分支的正确方法是什么?如何使用git分支

从我所收集的,这是我认为它应该被用来:

得到了一些“开发”从分支签出分支:

"feature-1" 
"feature-2" 
"feature-3" 

现在,一个或多个开发人员将在一个或多个功能分支上工作,并且当团队领导想要将所有内容粘合在一起并测试时,他会将这些功能重新合并到“开发”主干中。 但是,git似乎缺乏能够从每个功能分支中选择保留哪些更改(尝试递归,耐心和每个其他合并策略),因此最终有时每个分支最终会覆盖先前分支合并回来的内容'发展'。 事情变得更加糟糕,因为开发人员继续在分支上工作,团队领导尝试将它们不时合并到“开发”中以合并更改。

显然,这不是正确的分支功能。但那么正确的方法是什么?

感谢

编辑:

只是为了进一步说明,让我们考虑一下我们这些文件在开发分支:

fileA (develop) 
fileB (develop) 
fileC (develop) 

现在,在 “功能-1”,这只会接触的fileA合并回:

fileA (conflict, theoretically solvable by the recursive/theirs strategy) 
fileB (develop) 
fileC (develop) 

接下来合并回“only-2”,只触及fileB:

fileA (overwritten by feature-2!!!) 
fileB (conflict, theoretically solvable by the recursive/theirs strategy) 
fileC (develop) 

如何处理fileA?我希望它保留它的“功能-1”版本。

+0

这是“正确的方式”,只是正确合并,一切都会好的。 – zerkms

+1

这可能会退化为意见类型的讨论,但我不确定是否可以举报。我个人认为“如何在git中进行分支”是一个宗教讨论。如果您可以将其重写为“我们希望以a-b-c的方式在git中进行分支,但是我们会收到x-y-z错误”,那么您将更有可能获得有用的答案。 – shoover

+0

@zerkms照顾评论我的编辑? – kellogs

回答

3

好像你还没有尝试过你所问的,只是假设它是如何工作的。

如果这是真的 - 那么你的假设是不正确的。在git中合并2个分支时,它会计算源分支开始与HEAD(或您正在合并的任何其他变更集)之间的差异,并将其应用于目标变更集。

因此,遵循您的示例 - 当您合并feature-2时,fileA不会以任何方式进行修改,只是因为它未在feature-2中修改。

所以根本没有问题。

+0

好吧......好吧,在我的低调中,谁知道我旋转了什么旋钮并吹了垫圈?请告诉我怎样才能看到合并后发生了什么变化 – kellogs

+0

@kellogs:'git diff'? – zerkms

+0

我认为git diff HEAD ^做到了。 – kellogs