在VisualStudio中执行GIT拉取时如何正确处理合并

在VisualStudio中执行GIT拉取时如何正确处理合并,git,visual-studio,visual-studio-2013,tfs,visual-studio-2015,Git,Visual Studio,Visual Studio 2013,Tfs,Visual Studio 2015,在处理合并时,我无法使GIT for TFS在Visual Studio中正常工作。基本上,当我提取最后一个版本的代码时发生的每个合并操作都是一场噩梦 我特别谈论的是当从同一分支提取其他人的代码时发生的合并(即,我不是在谈论涉及多个分支的场景) 我还特别提到了Visual Studio的内置GIT插件,因此,如果IDE中有其他解决方案,请不要建议执行我知道的命令行命令(如rebase)(“您不能”将是一个有效的答案) 下面是如何重现这个问题: 有两个开发人员,A和B,在同一个分支上工作 开发人

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

我特别谈论的是当从同一分支提取其他人的代码时发生的合并(即,我不是在谈论涉及多个分支的场景)

我还特别提到了Visual Studio的内置GIT插件,因此,如果IDE中有其他解决方案,请不要建议执行我知道的命令行命令(如rebase)(“您不能”将是一个有效的答案)

下面是如何重现这个问题:

  • 有两个开发人员,A和B,在同一个分支上工作
  • 开发人员A推送一些修改文件F1和F2的提交
  • 开发人员B修改文件F1和F3
  • 开发人员B提交对F1和F3的修改
  • 开发人员B执行拉取:Visual Studio检测到文件F1上存在冲突(这是预期的)
  • 开发人员B解决F1上的冲突
现在问题来了:B的所有文件F1、F2和F3都处于修改状态。为什么?开发者B只修改了文件F1和F3我看不到F2处于修改状态的有效原因,因为B没有修改它

我知道本地的F2文件与拉之前不一样,但问题是B基本上不能在推之前查看他在F1和F3上的更改,因为其他人的工作(在上面的简化示例中,在F2上)也出现在他的更改列表中

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

此问题始终出现在最新的Visual Studio 2013中。Visual Studio 2015似乎足够聪明,不会将F2显示为已修改,但并不总是如此

如何修复此行为?目前GIT是VisualStudio中使用的PITA,正因为如此


编辑:

这是一个直观的例子。在左边,VS 2013中显示的历史:大量修改的文件。在右边,是与VS 2015中显示的非常相同的历史记录(相同的存储库、相同的机器、相同的提交…等等)。很明显,VS 2015显示了一些不同的、稍微好一点的东西(我只看到我的变化)。请注意,这并不总是这样,有时VS 2015会显示我没有修改的文件,就像VS 2013一样

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

问题是:

  • 这是虫子吗
  • 如果没有,是否有文件记录
  • 在任何情况下,我应该如何处理GIT,特别是VS2013,上面所示的不一致性

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

当你说:

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

这就是你错的地方。Git检测到冲突,因此无法执行合并。(即使您是从“同一”分支进行合并,git所做的就是创建一个合并提交,将这些分支带到一起)

当这种情况发生时,git会向您展示两个分支带来的所有差异。您可以git添加(或在visualstudio中的任何名称)所有文件,而不会产生冲突,它们将是“合并提交”的一部分

您需要做的唯一一件事是修复标记冲突的地方,让其余冲突保持原样,并创建合并提交


总结一下,当合并失败时,您可以看到更改和冲突。只需专注于解决冲突,让常规更改保持原样

我已经将VisualStudio2013与Git结合使用&对于上面提到的场景,它工作得非常好

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

我建议卸载任何自定义插件、除本机VS支持之外的工具,并将Visual Studio更新为最新补丁

如果问题仍然存在,请尝试在Visual Studio中的所有开发人员中导入相同的用户设置。参考:

工具=>导入和导出设置..=>

下一步=>

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


不同的插件,如git extensions、tortoise git或任何其他自定义git扩展,都可以使用行尾或默认选项卡空间,从而导致任何开发人员在几乎所有更改的文件中检测到更改。

因此开发人员B修改了F1和F3,但没有推送到远程分支,对吗?@TriskalJM是的,就是这样。通常,您不会通过查看未提交的合并来确定两个分支的区别。在完成合并并提交合并后,通常会将分支与上游分支进行比较。并可能有助于阐明其中一些概念。一个小建议。学习如何使用GitBash。这样,您将始终能够使用git。现在你是视觉工作室的沃克林,几年后你可能会在Webstorm或Eclipse中工作。。学习每个单独的集成git工具都会很麻烦,所以我真的建议学习可用的通用git工具。@Edvin好吧,我使用Visual Studio已有10多年了,除了VS之外,我从未做过任何与源代码管理相关的基本任务(除了文件差异)。我真的不想因为GIT现在就开始。如果我的简单问题没有解决方案,GIT或VS都会崩溃