Azure开发人员-Visual Studio 2015 Git错误消息“由于存在未提交的更改而无法拉/切换”

我在从git diff -R进行拉取时遇到困难。我不断得到:

“由于存在未提交的更改而无法拉出。提交或撤消更改,然后再次拉出。有关详细信息,请参见“输出”窗口。”

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

我正在使用Visual Studio 2015 Update 1和Visual Studio Team Services Git。 在我的机器上,我有一个本地git diff -R分支和开发分支。 每次我切换到* text=auto,然后进行拉动时,都会收到错误消息。 我已经采取了隐藏和隐藏隐藏(命令行)的方法,有时我使用TortoiseGit进行拉取并起作用。

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

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

我对Git还是很陌生,但是我想知道是否有更好的解决方法,因为我想使用一个环境,而不是为每个任务使用不同环境之间的切换。 对我来说,只需执行Visual Studio的所有操作就更容易了。 我已经读过:

VS中的TFS / GIT无法切换到主服务器,因为存在未提交的更改

UPDATE

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

通过执行git diff -R,您可以看到已添加了行尾“ ^ M”,并且这是不同的。 删除gitattributes中的* text=auto(然后检查更改),然后再次放回去,以便gitattributes不会发出需要提交的本身更改,这似乎有所帮助,不会有任何更改。

12个解决方案
60 votes

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

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

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

Csaba Toth answered 2019-11-04T07:19:29Z
10 votes

在该目录中打开的命令行中键入git status。 如果有红色和/或绿色文本,则您已更改了某些内容,并且未添加并提交。 还原文件(执行git checkout -- <file>),或添加并提交(执行git add --all,然后执行git commit -m "commit message")。 然后,您可以签出分支机构或您要执行的其他任何操作。

TechnicalTophat answered 2019-11-04T07:19:57Z
8 votes

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

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
Dhruv answered 2019-11-04T07:20:23Z
6 votes

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

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

Eddie Chen - MSFT answered 2019-11-04T07:20:57Z
5 votes

有时甚至与我发生这种情况。 如果您使用的是Visual Studio,则有一种简单的方法可以使您的方法变得清晰。

对于Visual Studio 2013及更高版本,请按照以下说明进行操作:

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

而已。 Git将被重置,然后您将能够轻松地提出请求。

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

Yagnesh Khamar answered 2019-11-04T07:21:57Z
4 votes

我在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/zh-cn/azure/devops/repos/git/git-config?tabs=visual-studio&view=vsts#prune-remote-branches-during- fetch] facepalm时刻是您意识到“我们建议在全局级别将此选项设置为True”。 不是这些项目的默认设置。

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

user1431356 answered 2019-11-04T07:22:46Z
1 votes

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

然后,使用右键单击撤消每个文件。 以前,我在整个解决方案上通过撤消功能对其进行了测试,但无法正常工作。 再一次,我使用了团队资源管理器→同步→拉取,它成功了。

Elnaz answered 2019-11-04T07:23:20Z
1 votes

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

git status

然后我通过使用拉

git pull

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

Rachit Chauhan answered 2019-11-04T07:24:01Z
0 votes

对我来说,问题中的“更新”就是答案。 我在存储库的根目录中添加了一个.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 
Josh answered 2019-11-04T07:24:27Z
0 votes

这是我遵循的步骤:

  1. 在输出窗口中引用未提交文件的路径
  2. 导航到该路径,然后从文件夹中删除该文件
  3. 在Visual Studio中从Team Explorer撤消更改,然后再次添加
CSharp answered 2019-11-04T07:25:14Z
0 votes

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

Emil Helldin answered 2019-11-04T07:25:42Z
0 votes

Visual Studio中打开local,并将git add * -f切换到remotegit将让您知道阻止其拉动的原因。 当然,最常见的原因之一可能是这样的:

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

这仅表示已将44个文件添加到git add * -f存储库中,而这些文件不属于git add * -f存储库。 打开remote并运行以下命令:

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

希望这可以帮助。

Babak answered 2019-11-04T07:26:35Z
translate from https://stackoverflow.com:/questions/36647308/visual-studio-2015-git-error-message-cannot-pull-switch-because-there-are-uncom