Visual Studio 的 Git 扩展程序

10

我是Git的新手,正在使用Visual Studio的Git扩展。当其他团队成员提交更改时,有时我尝试同步项目时可以看到传入的提交,但项目未同步,并引发以下错误。

libgit2引发了一个错误。类别=21(MergeConflict)。2个未提交的更改将被合并覆盖

问题在于如何解决合并冲突?在引发此错误后,没有用于合并冲突的窗口,而且我也已经提交了所有更改。

3个回答

5
此消息涉及到未提交的更改,而不是真正的合并冲突。学会不要在未提交更改时进行合并或其他高级git操作。在执行操作之前,请提交您的更改或将它们藏起来。即使像这样的冲突没有被标记出来,它也可能不是您真正想要做的事情。
在GE中有一个选项可以显示工作树更改(除非您在处理巨型存储库并经常有数百个更改的文件,否则请忽略“慢”的警告),并习惯于在浏览中查看它。此外,“提交”按钮显示一个计数器,在启动合并时应为0。
如果您在工作过程中想要同步(并再次考虑并且有一个真正好的理由,诚实地说),请使用stash,然后执行pull(或rebase),完成后,取消stash您的工作。
真正的合并冲突最好使用可视化合并工具处理,您可以尝试使用tortoisemerge或者我最喜欢的sourcegear's diffmerge。虽然随GE附带的Kdiff3适合浏览,但在解决冲突方面并不好,除非您需要挑选文字。GE会自动将您带到冲突解决过程中。

1
选择一个良好的工作流程实践来避免这个问题。始终在一个功能分支上进行工作。当你准备合并时,切换到主分支进行同步,然后一旦主分支是最新的,合并你的功能分支。或者,如果你更喜欢快进式的工作流程,你可以将你的功能分支重新基于主分支,然后再合并。但基本上 - 如此回答所述。 - patthoyts

3
之前的答案并不总是正确的。即使您没有任何未提交的更改,也可能会收到此消息。我的同事和我都修复了一个错误,并提交到我们的本地仓库,而我喜欢他的更好。我从未检查过我的更改,但撤消了它并拉取了他的更改。
与此同时,他已经“还原”了他的更改(没有与我交谈),然后要求我推送我的更改。我告诉他我扔掉了我的更改,所以他撤消了他的还原(最终有两个提交)。
当我去推送另一个更改时(在我的本地仓库提交了没有未提交更改的更改),他已经推送了他的更改还原和重新还原,我得到了上面的消息。
解决方案非常简单,我使用操作菜单打开命令提示符并在那里发出了git pull。这样做可以正确地创建合并提交,其中包含他的还原和重新还原。
是的,他可以使用 (插入无法理解的git-gibberish),但他没有,所以别管它,我们继续前进。
这里是关于此问题的VS反馈项:http://connect.microsoft.com/VisualStudio/feedbackdetail/view/955248/git-merge-fails-claiming-uncommited-change-would-be-overwritten-by-merge-ssh-mergeconflict

1
git reset --hard,对我有用(我遇到的问题可能是由于我在另一台机器上对同一分支进行了未提交的更改所致,该机器是虚拟机)。 - learnerplates

1
有时候,git pull 不足以解决问题(如果你看到 "Already up to date.")。可能需要通过命令行进行合并操作:
Visual Studio 中(对我来说是 2015 年的 Update 3),在 Team ExplorerBranchesActions 中找到 Open In Command Prompt,然后执行以下命令:
git merge NameOfBranchBeingMergedFrom

然后关闭该窗口,并从 VS 中执行其余操作(合并冲突等)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接