如何在Visual Studio中执行GIT PULL时正确处理合并

时间:2016-03-29 11:54:53

标签: git visual-studio visual-studio-2013 tfs visual-studio-2015

在处理合并时,我无法在Visual Studio中使GFS正常工作。基本上,当我拉出代码的最后一个版本时发生的每个合并操作都是一场噩梦。

我特别谈到发生的合并从同一个分支中拉出某人的其他代码(即我 谈话关于涉及多个分支的场景。)

我还特别谈到 Visual Studio的内置GIT插件,因此请不要建议执行我所知道的命令行命令(例如rebase)如果IDE中有另一个解决方案("你可以'#34; 将是一个有效的答案)。

以下是如何重现此问题:

  • 有两个开发人员,A和B,在同一个分支上工作
  • 开发人员A推送一些修改文件F1和F2的提交
  • 开发者B修改文件F1和F3
  • 开发者B提交对F1和F3的修改
  • 开发人员B执行拉动:Visual Studio检测到文件F1(预期)的冲突
  • 开发者B解决F1上的冲突

现在问题在于:所有文件F1,F2和F3都处于修改状态,为什么?开发人员B只修改了文件F1和F3。 我没有看到F2进入修改状态的正当理由,因为B没有修改它。

我理解本地 F2文件与拉动之前不一样,但问题是B在推动之前基本上无法检查他对F1和F3的更改,因为每个人其他人的工作(在上面的简化案例中,在F2上)也出现在他的变更清单中。

在我们的真实场景中,有多个开发人员在同一个分支上工作,并且每个合并都是分支历史记录中的主要故障:Visual Studio基本上显示了一堆50个左右每个合并的修改过的文件(当开发人员只修改了1或2个文件时)。

此问题始终与最新的Visual Studio 2013一起发生.Visual Studio 2015似乎足够聪明,将F2显示为已修改,但不是总是

如何解决此问题?目前,GIT是一个在Visual Studio中使用的PITA。

编辑:

这是一个直观的例子。在左侧,VS 2013中显示的历史记录:大量修改过的文件。在右边,VS 2015中显示的历史相同(相同的存储库,相同的机器,相同的提交......等)。显然VS 2015显示了不同的东西,稍微好一点(我只看到我的更改)。请注意,这并不总是以这种方式工作,有时候VS 2015会显示我没有修改的文件,就像VS 2013一样。

这个问题是关于我要推送合并的结果时的这种行为,但当我只是查看旧合并的历史时它完全相同,如下图所示:

enter image description here

问题是:

  • 这是一个错误吗?
  • 如果没有,是否有记录?
  • 在任何情况下,我如何与GIT合作,尤其是VS 2013,如上所示的不一致?

2 个答案:

答案 0 :(得分:2)

你只需要了解git是如何工作的。

当你说:

  

开发人员B执行拉动:Visual Studio检测到文件F1上的冲突(预期)

那你错了。 Git检测到冲突,因此无法执行合并。 (即使你是从"相同的"分支合并,git正在做的是创建一个合并提交到磁带这些也分支在一起)。

当发生这种情况时,git会向您显示两个分支带来的所有差异。您可以 git add (或者在visual studio中调用的任何内容)所有文件没有冲突,它们将成为" merge commit"的一部分。

您唯一需要做的就是修复标记它们的冲突,然后按原样保留其余部分并创建合并提交。

总结,当合并失败时,您会看到更改冲突。只需专注于修复冲突,让常规的更改就像它们一样。

答案 1 :(得分:0)

我使用Visual Studio 2013与Git&它适用于您上面提到的场景。

我的建议是检查这些开发者的用户设置是否存在差异。行结尾,制表符空间或使用Ctrl + K + F(格式化快捷方式)中的任何更改都可能出现问题。

我建议卸载除自然VS支持之外的任何自定义插件,工具,将Visual Studio更新到最新补丁。

如果问题仍然存在,请尝试在Visual Studio中的所有开发人员中导入相同的用户设置。请参阅:How to: Share Settings Between Computers or Visual Studio Versions

工具=>进口和导出设置.. =>

enter image description here

接着=> enter image description here

导出此设置&导入到所有其他用户,以便所有用户具有相同的设置。

git扩展,togise git或任何其他自定义git扩展等不同的插件可以使用行结尾或默认的制表符空格,导致任何开发人员几乎在所有已更改的文件中都检测到更改。