【问题标题】:Visual Studio 2015 Git error message "Cannot pull/switch because there are uncommitted changes"Visual Studio 2015 Git 错误消息“无法拉/切换,因为有未提交的更改”
【发布时间】:2016-08-07 10:27:59
【问题描述】:

我很难从origin 拉取数据。我不断得到:

“无法拉取,因为有未提交的更改。在再次拉取之前提交或撤消您的更改。有关详细信息,请参阅输出窗口。”

这也适用于切换分支。我收到了类似的消息,但这并不总是发生。

我正在使用 Visual Studio 2015 Update 1 和 Visual Studio Team Services Git。在我的机器上,我有一个本地 master 分支和开发分支。每次我切换到master 然后我拉动我都会收到错误消息。我采取了 stash 和 drop stash(命令行)的方式,有时我使用 TortoiseGit 进行拉取,它可以工作。

奇怪的是,即使我尝试使用 TortoiseGit 还原(在未提交的文件上),它也显示它已成功还原(我已经尝试过 Visual Studio 撤消,没有任何反应)。再次尝试拉动,仍然是同样的问题。未提交的文件会在那里,有时当我执行git status 时,它会说没有什么可提交的。

请注意:即使在从分支切换到 master 之后也会发生这种情况。在这种情况下,不可能有未提交的更改,因为我一开始就无法切换。

我还是 Git 新手,但我想知道是否有更好的方法来解决这个问题,因为我想使用一个环境而不是为每个任务在不同环境之间切换;在 Visual Studio 中做所有事情对我来说更容易。我已经阅读了:

TFS/GIT in VS Cannot switch to master because there are uncommitted changes

更新

似乎这个问题与行尾有关。

通过git diff -R 可以看到已经添加了一个行尾“^M”,它是不同的。删除 gitattributes 中的 * text=auto(然后检查更改)并将其重新打开,以便 gitattributes 不会发出需要提交的自身更改的信号似乎有帮助,不会有任何更改。

【问题讨论】:

  • 我重新启动了 Visual Studio 几次,然后我能够拉出将我带到合并冲突屏幕的更改。

标签: visual-studio-2015 azure-devops git-pull git-checkout git-revert


【解决方案1】:

在该目录打开的命令行中键入git status。如果有红色和/或绿色文本,您已经更改了一些内容并且没有添加和提交。要么恢复文件(通过git checkout -- <file>),要么添加并提交(通过git add --all 然后git commit -m "commit message")。然后你可以检查分支或任何你想做的事情。

【讨论】:

  • 我有未跟踪的文件。可能是这个问题
  • @kwiri 是的,这意味着自上次提交以来您已经创建了文件,并且尚未提交它们。只需执行git add --allgit commit -m "Add your commit message here"。然后您应该能够结帐其他分支。
  • 我需要检查 Visual Studio 是如何处理这个问题的,因为如果你将文件添加到项目中,它们也应该被自动添加到提交中。我目前无权访问我的源代码,但我很确定我在切换到我尝试进行拉取的 master 之前提交了 dev 分支中的文件
  • @kwiri 好的,如果您可以评论更多信息,例如发生错误的分支名称,您的 git log 显示的内容以及您最后一次提交编辑的内容(相关到未跟踪的文件)
  • @kwiri 未跟踪的文件不能成为问题恕我直言。如果您修改了未提交的跟踪文件或暂存文件,则可能出现问题。就我而言,我没有任何未提交或未跟踪或更改的文件,VS 2015 仍然显示此警告。不得不去 Git Bash 和 vi 来取消排序。有时 VS 2015 在合并冲突期间会崩溃。
【解决方案2】:

通过在命令提示符中转到项目的工作目录来尝试使用这些命令。

git add -A
git commit -m "your message"
git fetch origin master
git pull origin master
git push origin master //To push to the Git system

【讨论】:

  • 问题不在于命令,更多的是关于 VS 2015 中的工具我想使用 VS Team explorer 在一个环境中工作。由于时间关系,我不想切换到命令并尝试记住当我们在 VS 中已经有一个内置工具时,所有命令,我的想法可能是我们的项目是如何构建的,可能是我们做错了什么导致了问题
  • 为我工作,谢谢 :) git add -A git commit -m "your message" git pull
  • 这对我来说非常有效!您可以在 VS2015 的 Package Manager Console 中编写这些命令,并且可以完美运行。我的问题解决了! @Dhruv
【解决方案3】:

当有文件/更改尚未在本地提交,但它包含在拉动操作中时,通常会发生此问题。

例如,您直接从本地 Git 存储库文件夹(在 Visual Studio 之外)添加一个新文件“test.txt”。该文件可能会列在“未跟踪的文件”选项中,因此当您提交更改时,该文件不会被跟踪和提交。然后另一个人也创建了一个具有相同路径的“test.txt”并提交并推送它。现在,当您执行拉动操作时,“test.txt”文件包含在拉动操作中,您将收到指示存在未提交更改的错误消息。因此,您需要检查是否有未提交的文件/更改并在拉取之前提交。

【讨论】:

  • 我仍然有奇怪的问题。我正在尝试手动合并,Git 说有未提交的更改,我做了一个存储,它仍然说有未提交的更改。我不想提交我的更改,因为我没有对这些文件进行任何更改,并且 diff 显示文件没有任何更改。我尝试了 reset --hard 同样的事情,它说有未提交的更改和相同的文件。
  • 谢谢。当我删除“未跟踪文件”中的文件时,我就可以切换我的分支了。
【解决方案4】:

对我来说,我没有任何未提交的更改或任何未跟踪的文件,Visual Studio 2015 仍然显示警告。

  1. 在 Visual Studio 中关闭解决方案,退出 Visual Studio。
  2. 打开Git Bash(或您最喜欢的Git UI)
  3. 导航到您的存储库(或使用 Git UI 打开存储库)
  4. git pull(或在 Git UI 上执行拉取操作)
  5. 发生合并(希望没有冲突,就像我的情况一样),vi 打开(或默认合并解决工具)
  6. :wq 然后在vi 中按ENTER(或冷静处理可选弹出的合并工具),希望这能像我一样解决它。
  7. 启动 Visual Studio 2015,打开项目

通过指示关闭和打开解决方案和 Visual Studio,我逐步添加了更安全的方法。这可能过于谨慎,也许重新加载就足够了。此症状可能是 Visual Studio Git 集成部分的错误,也许以后会解决。

【讨论】:

  • 我同意,总是检查它是否在 VS、命令行或任何其他 Git GUI 之外工作
  • 自 5 月以来,有几个 VS 更新以及 VS Git 集成的更新。我已经很久没有看到这种不幸事件了。始终将 VS 及其插件更新到最新版本。
  • 老是看到这个错误,惊呆了,这么大的产品居然还有这么基本的问题……
  • 我正在使用 VS 2015 更新 3。从 github 存储库中提取时遇到了这个问题。 - 打开命令提示符, - 将目录更改为本地的 git repo 并 - 输入 git pull
【解决方案5】:

以下是我遵循的步骤:

  1. 参考输出窗口中未提交文件的路径
  2. 导航到该路径并从文件夹中删除该文件
  3. 撤消您在 Visual Studio 中的团队资源管理器中所做的更改以重新添加它

【讨论】:

    【解决方案6】:

    对我来说,问题中的“更新”就是答案。我在存储库的根目录中添加了一个 .gitattributes 文件,并且仅包含以下内容,因此只有在文件为文本的情况下才会对行尾进行规范化。

    *.txt text
    *.html text
    *.css text
    *.js text
    # These files are text and should be normalized (Convert crlf => lf)
    *.gitattributes text
    .gitignore text
    *.md texttesting 
    

    【讨论】:

      【解决方案7】:

      我在 Visual Studio 2017 build 15.5 中遇到了这个问题,为我解决的问题是进入团队资源管理器设置全局设置并设置“修剪远程获取期间的分支”和“拉动时的本地分支”为True

      http://www.codewrecks.com/blog/index.php/2017/12/23/configure-visual-studio-2017-15-5-for-pull-rebase/

      MS 在这里也有说明:https://docs.microsoft.com/en-us/azure/devops/repos/git/git-config?tabs=visual-studio&view=vsts#prune-remote-branches-during-fetch 当您意识到“我们建议在全局级别将此选项设置为 True”时,这是最重要的时刻。不是这些项目的默认设置。

      如果您有单独的构建服务器并且解决方案在编译器上获得频繁的 NuGet 更新,则会出现此问题的另一个实例。第一个更新 NuGet 包并同步 repo 的人不会有任何问题,但如果其他人在本地尝试更新,在执行同步之前,会弹出此消息,并且 VS 不允许您拉取或推送代码。为了防止这个问题,每个人都应该养成在本地进行任何更新之前同步的习惯。一旦遇到,我们发现解决它的最佳方法是存储您需要保留的任何未提交的代码 (https://marketplace.visualstudio.com/items?itemName=vii.GitStashExtension),然后将您的存储库重置为当前头部。

      【讨论】:

      • 我没有“提取期间修剪远程分支”和“拉取时重新设置本地分支”
      • @Ziggler 真的吗?我在上面添加了两个来源的链接。从 VS Pro 2017 v15.5 到至少 v15.8.7 列出了这些设置。
      • Unset command 用于删除 Git 配置,因此在上下文中看起来有点不协调。随着最新的 Git 扩展更新,Git 设置页面有更多选项。 @Ziggler:你有什么版本的VS?
      • 谢谢,这对我有用。在这个问题上浪费了几个小时
      【解决方案8】:

      这种情况有时甚至发生在我身上。如果您使用的是 Visual Studio,有一种简单的方法可以让您的方式清晰。

      对于 Visual Studio 2013 及更高版本,请按照以下说明操作,因为这对我有用:

      • 转到菜单 工具NuGet 包管理器包管理器控制台
      • 输入 git reset 并按 Enter

      就是这样。 Git 将被重置,然后您将能够轻松拉取您的请求。

      VS2015:工具 > Nuget 包管理器 > 包管理器控制台。像魅力一样工作。谢谢。

      【讨论】:

        【解决方案9】:

        我也有这个问题。一个简单的解决方案是,我在解决方案上选择了 Commit 以查看未提交的文件(或轻松使用 Team ExplorerChanges)。

        然后我使用右键单击撤消每个文件。之前,我通过 Undo 对整个解决方案进行了测试,但它不能正常工作。再一次,我使用了 Team ExplorerSyncPull,它成功了。

        【讨论】:

          【解决方案10】:

          这对我有用。我刚刚去了项目目录并检查了是否有东西

          git status
          

          然后我通过使用进行拉动

          git pull
          

          然后我重新启动 Visual Studio 2015 并拉出导致此错误的分支。这次没有问题。 这似乎是 Visual Studio 2015 中的一个错误。它仅在您在拉取新更改之前撤消更改时发生。 Visual Studio 2017 中似乎不存在同样的问题。

          【讨论】:

          • 这解决了我在使用 VS 2019 应用存储时出现错误的问题。
          【解决方案11】:

          对我来说,这个问题是由两个文件“Web.Config”和“web.config”引起的。我想这在 Linux/Unix 中是可以的,但 Windows 只能在本地存储其中一个。我在探索文件的 azure devops 中检测到了这一点。我删除了其中一个,问题就解决了。我猜这个问题可能是由任何文件引起的。

          【讨论】:

            【解决方案12】:

            Visual Studio 打开Output Window 并将Show output from 切换到Source Control - gitgit 会让你知道是什么阻止了它。最常见的原因之一当然是这样的:

            The pull would overwrite your local changes to the following 44 files:
                <Here you can probably see a list of 44 files>
            

            这只是意味着 44 个文件已添加到 remote 存储库中,它们不属于 local 存储库。打开Git Bash 并运行以下命令:

            git add *
            

            这可能会解决问题或导致如下错误:

            $ git add *
            The following paths are ignored by one of your .gitignore files:
            TestResults
            Use -f if you really want to add them.
            

            如果您确定要将它们添加到local repro,只需使用git add * -f 添加它们或从remote 中删除错误添加的文件。

            希望这会有所帮助。

            【讨论】:

              【解决方案13】:

              无法拉取,因为有未提交的更改。在重试之前提交、存储或撤消您的更改。有关详细信息,请参阅“输出”窗口。

              有一个简单的解决方案可以解决这个错误:

              首先提交您的更改存储或撤消。然后拉代码。例如

              git 拉

              那么它应该可以正常工作。

              【讨论】:

                猜你喜欢
                • 2017-03-07
                • 2018-11-17
                • 2016-05-08
                • 2014-10-30
                • 1970-01-01
                • 1970-01-01
                • 2015-08-17
                • 2020-12-27
                • 1970-01-01
                相关资源
                最近更新 更多