Visual Studio 2015 Git错误消息“无法拉/切,因为有未提交的更改”

问题描述 投票:52回答:12

我很难从origin做一次拉力赛。我一直在:

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

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

我正在使用Visual Studio 2015 Update 1和Visual Studio Team Services Git。在我的机器上,我有一个本地的master分支机构和开发分支机构。每次我切换到master,然后我做拉,我得到错误信息。我已经采取了存储和删除存储(命令行),有时我使用TortoiseGit做拉,它的工作原理。

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

请注意:即使从分支切换到master后,也会发生这种情况。在这种情况下,无法进行未提交的更改,因为我无法在第一时间切换。

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

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

UPDATE

看起来这个问题与行结尾有关。

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

visual-studio-2015 azure-devops git-pull git-checkout git-revert
12个回答
59
投票

对我来说,我没有任何未提交的更改或任何未跟踪的文件,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然后在ENTER中按vi(或平静处理可选地弹出的合并工具)并希望这解决它就像我一样。
  7. 启动Visual Studio 2015,打开项目

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


0
投票

以下是我遵循的步骤:

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

0
投票

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


0
投票

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中删除错误添加的文件。

希望这可以帮助。


10
投票

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


8
投票

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

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

6
投票

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

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


3
投票

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

Team Explorer Git Settings

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 facepalm时刻是你意识到“我们建议在全球范围内将此选项设置为True”。不是这些项目的默认设置。

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


2
投票

有时甚至在我身上也会发生如果您使用的是Visual Studio,那么有一种简单的方法可以让您清楚地了解它。

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

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

而已。 Git将被重置,然后您就可以轻松提取您的请求。

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


1
投票

我也有这个问题。一个简单的解决方案是我在解决方案上选择了Commit以查看未提交的文件(或轻松使用团队资源管理器→更改)。

然后我使用右键单击撤消每个文件。以前,我在整个解决方案中通过撤销测试它,但它无法正常工作。然后,我使用了团队资源管理器→同步→拉,它工作。


1
投票

这对我有用。我刚进入项目目录并检查是否存在某些内容

git status

然后我通过使用执行拉

git pull

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


0
投票

对我来说,问题中的“更新”就是答案。我在我的存储库的根目录中添加了一个.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 
© www.soinside.com 2019 - 2024. All rights reserved.