【问题标题】:Visual Studio 2013 does not offer to do merge on Git pullVisual Studio 2013 不提供在 Git pull 上进行合并
【发布时间】:2014-12-13 11:23:45
【问题描述】:

我正在使用 Visual Studio 2013 Update 4 和 git(托管在 Visual Studio Online 上)。我在远程分支中有 2 个本地提交和 2 个提交。没有要提交的本地更改:

当我尝试在 Visual Studio 中执行 Pull(或 Fetch)时,出现错误:

发生错误。详细消息:1 个冲突阻止结帐

是的,有冲突,我应该合并。根据to this page,我应该得到link to resolve conflict.,但我在VS中看不到。

我可以在 VS 之外进行合并,但这不是重点。同时,我的同事运行相同的设置可以毫无问题地进行合并。 我的 VS 出了什么问题?

附言我安装了 msysgit,可能会弄乱配置。根据这个post 我的全局.gitconfig 看起来像:

[user]
    mail = trailmax@stackoverflow.com
    name = trailmax
    email = trailmax@stackoverflow.com
[core]
    excludesfile = C:\\Users\\trailmax\\Documents\\gitignore_global.txt
    autocrlf = true
    editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor
[diff]
    tool = vsdiffmerge    
[difftool "vsdiffmerge"]
    cmd = \"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\vsdiffmerge.exe\" \"$LOCAL\" \"$REMOTE\" //t
    keepbackup = false
    trustexistcode = true
[merge]
    tool = vsdiffmerge
[mergetool]
    prompt = true
[mergetool "vsdiffmerge"]
    cmd = \"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\vsdiffmerge.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\" //m
    keepbackup = false
    trustexistcode = true
[credential]

【问题讨论】:

  • 以防万一,您在git config --global core.autocrlf false 之后检查冲突是否仍然存在(在新的克隆仓库中)?

标签: git visual-studio-2013 git-merge merge-conflict-resolution


【解决方案1】:

在我的情况下,我看不到 Resolve the conflicts 选项,因为我还没有提交 本地更改,我正在尝试与远程更改同步。一旦我提交了我的本地更改,然后再次尝试同步,Resolve the conflicts 链接就会出现。

所以这里的重点是:提交您的更改,然后尝试同步。 merge 将开始,Visual Studio 将允许您处理每个冲突

【讨论】:

  • 我的问题发生在我没有要提交的本地更改时 - 一切都已提交。在问题的第二行中说明了这一点,并附有截图来证明。
  • 是的...我看到了,但决定在此处发布此答案,以防万一像我这样的人遇到您的问题。也许他们面临同样的问题,不知道如何解决它。这是谷歌返回给我的唯一问题。 :) 感谢您的反对。真的很有帮助。
  • 在这种情况下,请将其放入您的答案中,因为您似乎没有阅读该问题。我会取消反对票。
  • 我已经排除了一些我之前不想提交的更改,而这些更改处于观望状态,阻止了拉取后的更新。我恢复了这些文件,它更新得很好。我猜这些算作未提交的本地更改
  • 'Uncommitted Changes' 也构成了没有被添加到项目中的文件,但仍然与传入的 pull 有冲突。因此,在显示Resolve the conflicts 链接之前,需要将那些冲突的文件添加到项目中。在我的情况下,我添加到项目中的一些文件 not 通过 Git 添加并且必须返回并显式添加。然后在提交丢失的文件后显示链接。
【解决方案2】:

我遇到了同样的问题,“发生错误。详细消息:1 冲突阻止结帐”显示在没有解决冲突的选项,如 Leinel 的回答中所示。

原因是由于一个未跟踪的文件与要提取的文件相同。我刚刚删除了未跟踪的文件并重试了拉取。

【讨论】:

  • 谢谢你,开始以为我要疯了
【解决方案3】:

我有同样的问题。事实证明,我有一个需要包含的未跟踪文件。因此,检查未跟踪文件的更改选项卡。

【讨论】:

    【解决方案4】:

    我没有在任何一个分支上列出任何“更改”(未跟踪或其他),因此其他答案对我不起作用。

    我决定去命令行:

    1. 在两个分支上单击同步
    2. 切换到要“合并”的分支(在我的例子中是 master)。
    3. Manage Branches 下的 Team Explorer 中,执行 Action -> Open Command Line
    4. 在命令行中输入git merge BRANCH_NAME。 (我的工作分支/合并“来自”)
    5. 现在解决冲突按钮可用。

    【讨论】:

    • 这是告诉您哪个文件存在冲突的唯一解决方案!
    • 基本不用VS。
    • @Ernesto,这可能是一个错误,但我发现学习使用 Team Explorer 和 git 可以满足我的所有需求。我必须使用命令行的情况很少见。
    • @Jess,我同意大多数情况下它都有效,但我希望它能够始终如一地工作。现在,当团队资源管理器无法与 git 很好地交互的问题发生时,至少我先尝试命令行可以节省一些时间。
    【解决方案5】:

    如果拉取期间的冲突是关于行尾字符的:

    git config --global core.autocrlf false
    

    这应该避免任何自动 eol 转换。

    您可以在“Why does git think each line of an untouched file has changed”中了解如何在工作树 (git diff --word-diff-regex=.) 中检测这种情况。

    【讨论】:

    • VS 似乎没有行尾问题。但这解决了问题
    • @trailmax 好的。我提到 eol 是因为 core.autocrlf 是关于 eol 的。我总是把它设为假:stackoverflow.com/a/2354278/6309
    • 是的,又做了一次测试(让其他用户进行冲突提交),一切都解决了。谢谢!
    • 不 -( 抱歉。我的伙伴签入了,现在我无法提取他的更改。但我可以合并我自己从其他 PC 上签入的内容。尝试拉取时我仍然遇到同样的错误消息:i.imgur.com/lTBO57R.png 我的本地仓库很干净,甚至没有提交。core.autocrlf 在我的机器上设置为 false
    • 但我通过第三方 SourceTree 应用程序提取了没有冲突的更改。 git 工作没有问题。只是 VS 是假的-(
    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 2017-01-15
    • 2020-12-18
    • 2017-10-18
    • 2022-07-11
    • 1970-01-01
    • 2014-06-24
    • 2022-01-06
    相关资源
    最近更新 更多