这可能是一个相当简单的问题,我如何使用git或如何将它与Visual Studio 2012集成。我有(或者我认为)有两个主要分支:掌握和开发。
我很少接触主分支,我主要是对开发分支进行提交,当我达到里程碑时,我将开发分支与主分支合并。如果我正在介绍一个新功能,我会从开发分支中创建一个新的分支专长/ SomeFeature。完成该功能后,我将其与develop分支合并,然后将其与master分支合并。
切换分支完全符合我的预期,我看到了旧的未经修改的代码版本。但是,当我在分支可视化程序中打开repo时,似乎我的所有提交都在一个分支中:
我期待看到循环和合并,就像在这个截图中一样:
为什么我的分支看起来不一样?为什么我的所有提交都出现在一个分支上?
答案 0 :(得分:1)
如果没有更多信息,很难确切知道发生了什么,但你可能会得到fast-forward merges。基本上,如果Git可以展平合并,则默认为这样做。您主要在develop
工作并将其重复合并到master
的工作流程会使您快速合并。
(请注意,没有任何内容错误的与快进合并。一些开发人员喜欢这种流程并且只是通过rebase
他们的工作来使用这种合并策略在合并之前。其他开发人员,包括我自己,喜欢看"合并气泡"进行功能合并。)
作为示例,请考虑以下提交图:
[master] A---B---C
\
[develop] D---E---F
master
包含提交A
,B
和C
。 develop
包含提交A
,B
,C
,D
,E
和F
。
此时,如果将develop
合并到master
,Git将默认为快进合并,从而导致
[master] [develop] A---B---C---D---E---F
这是因为合并会在逻辑上导致两个树中存在相同的提交:您正在将提交D
,E
和F
合并到已包含{{1}的分支上},A
和B
。
如果上一个图表看起来不同,例如
C
会发生一些不同的事情。你最终会得到这样的东西:
[master] A---B---C---G
\
[develop] D---E---F
在这种情况下,您将获得一个新的提交H,称为合并提交。
您可以使用[master] A---B---C---G-------H
\ /
[develop] D---E---F
标记强制后一种行为--no-ff
。 (还有一个git merge
标志来强制相反的行为。)从第一个例子开始,--ff-only
会产生类似的结果
git checkout master && git merge --no-ff develop
请注意新的合并提交[master] A---B---C-----------G
\ /
[develop] D---E---F
。
这一切都是从命令行上的Git角度出发的,但我注意到你使用的是Visual Studio。假设您正在使用该工具执行合并,我不确定如何触发G
选项从VS合并。遗憾的是,许多图形Git客户端隐藏了非常有用的选项,如此标志。