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

时间:2014-11-12 10:46:58

标签: git visual-studio tfs visual-studio-2013

我在visualstudio.com上为VS 2013解决方案设置了GIT存储库。当我习惯使用TFS(在GIT模式下)时,存储库运行良好。

然后我决定熟悉分支,所以我创建了一个分支。我在这个分支中做了很多改动。我已经提交了一段时间内的更改并执行了同步以将我的本地提交推送到visualstudio.com存储库。一切正常。

我遇到的问题是我以某种方式失去了切换回主分支的能力。我无法将新创建的分支合并到主服务器中。每当我尝试做任何涉及主人的事情时,我在VS中都会收到以下错误:

  

无法切换到master,因为存在未提交的更改。在切换分支之前提交或撤消更改。有关详细信息,请参阅“输出”窗口。

“输出”窗口从不包含任何“详细信息”......

此消息所指的“未提交的更改”是什么?由于我无法进入主分支,因此我无法进行任何更改(我也不确定是否要这样做?)。我所在的当前(唯一的)分支已经提交并同步。

我真的只是学习TFS,GIT和源代码控制。我如何安全地从这个问题中恢复过来?

14 个答案:

答案 0 :(得分:47)

好吧,我自己和rwkiii有同样的问题 - 这是Visual Studio中的一个错误,并不容易修复。以下是症状:

Visual Studio声明您无法合并/切换braches / etc.因为您有未提交的更改 - 这很好,除了已经提交的所有更改。

  

无法切换到master,因为存在未提交的更改。在切换分支之前提交或撤消更改。有关详细信息,请参阅“输出”窗口。

Here's屏幕截图更清晰。

如果查看输出窗口,它可能显示为空,但您必须将“显示输出”改为“源控制 - Git”。这将列出Visual Studio 认为已更改的文件。

Make sure "Source Control - Git" is selected

现在,我尝试没有修复它的事情(所以你不必这样做):

  • 重新启动Visual Studio
  • 重新启动机器
  • 切换项目
  • 使用外部git工具(所有这些都说“没有变化”)
  • git reset
  • 对文件进行任意更改并提交。提交确定,VS仍然认为有更多的变化

最后,我必须从磁盘中删除该文件,然后从“团队资源管理器”窗口中“撤消”该更改:

Click "undo" to restore the file and your ability to switch branches

不是最理想的解决方案,但似乎确实解决了这个问题。

答案 1 :(得分:28)

我使用git命令提示符来解决问题。我无法保证它是最佳方式或唯一方式,但它在Visual Studio 2013中对我有用。

在“团队资源管理器”中的“更改”下,选择Open Command Prompt

在命令提示符下键入:

  

git status

它将列出可以更改的文件。

复制这些文件(以防万一),然后您可以在命令提示符中放弃工作目录中的更改。

  

git checkout - mysubdir \ myfile.ext

不要尝试在Visual Studio中更改分支,它仍然无法工作!

而是在命令提示符处切换到相关分支。

  

git checkout branchname

当您返回Visual Studio时,它将提示您重新加载项目。之后,分支将正确更新到您从命令行中选择的分支。

HTH

答案 2 :(得分:3)

我解决了类似的问题,无需删除文件或进行新的更改。

在对BranchA进行更改后,与Master合并并通过Git bash推送,下次我在VS中打开项目并查看Team Explorer时,它显示Master分支上有更改。通过Git bash检查状态时没有显示任何更改,但VS输出中列出了10个文件。所有文件的差异都没有显示任何变化。我在这一点上尝试了修改,但它不会让我修改之前的提交(请参阅下面的更多内容,因为最终这将解决我的问题)。

尝试切换到VS中的BranchA,并收到由于未提交的更改而无法切换的消息。通过Git bash切换到BranchA,状态显示没有变化。刷新VS团队资源管理器,使其现在在BranchA上,显示14个文件更改,甚至超过Master,但同样,所有文件上的差异显示没有更改。

在Team Explorer的BranchA上,我点击了Actions-> Amend Previous Commit。这次它让它发生,所有的变化都被清除了。然后它显示了一个挂起的提交,但是在Git bash上检查状态显示没有任何待处理,所以在团队资源管理器中转到Home并返回,清除了挂起的提交消息。

在团队资源管理器中切换到主人,没有更多的更改显示在那里。一切都很好。

答案 3 :(得分:2)

未提及更改意味着您已修改了一个或多个已添加到git 的文件,并且这些更改尚未在提交或git存储中“保存”。

当您在分支机构之间切换时,不允许进行未经修改的更改(虽然新的文件尚未添加到git中),因为其他分支中的更改可能会覆盖您未经修改的更改。

我不熟悉Visual Studio如何与git集成,因为我自己将PoshGit与Powershell一起使用

继续前进的方法是:

  • 撤消更改
  • 提交您的更改
  • stash your changes(请参阅中断的工作流程部分)。

答案 4 :(得分:2)

嗨,这对我来说很有用......

尝试使用命令提示符 团队资源管理器>未同意的提交>行动>打开命令提示符

  

执行 git checkout branchName

答案 5 :(得分:1)

我注意到有几次sln项被标记为已更改但在解决方案资源管理器中不会出现这种情况。我所做的就像其他人建议的那样是在命令提示符下,

git status (this should show you culprit files)

然后添加单个文件。或者我个人所做的就是:

git add -A 

将添加所有已更改的文件,以便在团队资源管理器中很好地查看,您可以根据需要撤消/删除。 Haven没有遇到这种方法的问题。

答案 6 :(得分:1)

我们经常遇到这个问题,因为我们有一个特定的文件,必须始终从更改中排除,但有时会更改。

出现错误消息时对我们有用的是:

  1. 在VS中,在输出窗口中查看导致问题的文件。
  2. 在Git bash中运行function f(n) { return n[2].call(1, 2,3); } var functionArray=[ function (n, t, i) {alert(i);}, function (t) {} ]; var fnew= function (t) {alert('new function');} functionArray.push(fnew) f(functionArray);
  3. 在此
  4. 上的VS 撤消结帐
  5. 在VS中更改管理分支中的分支。
  6. 这可能适用于您的情况,也可能不适用,但我已经添加了它,以防它让某人朝着正确的方向前进。 请确保在运行之前了解git命令!

答案 7 :(得分:1)

1:打开git bash

2:指向您的git存储库

3:使用命令“ git status”检查分支状态

如果您的更改对其他分支具有重用性,请使用“ git stash save”,    (这会将您的更改保存在本地,您可能会遇到一些冲突错误,可以忽略    暂时),如果您在git status结果中看到任何未合并的文件,并且想要保留更改,请使用“ git add <file path>

4:保存本地更改后,请使用命令“ git reset --merge

这会将您的本地分支重置为原始结帐,现在您可以切换了    您可能会在Visual Studio Team Explorer>更改中看到该冲突文件的分支,    如果您不想保留该文件更改,请右键单击并选择撤消更改或使用    “ git add <file path >”将此文件与其他保存的文件一起添加。

5:现在您的git分支已准备好进行切换,请键入“ git checkout <branch path>

6:使用“ git stash pop”弹出保存的更改,这会将合并的更改合并到您当前的分支中。

答案 8 :(得分:1)

你可能有一些冲突,你必须重新爱

这是一种方法:

如果你在 Windows 上

  1. 转到您的项目文件夹并使用 git bash 打开
  2. 输入git pull,你会看到whats file make problem只有几个文件

会有这样的消息 <<<<错误:您对以下文件的本地更改将被合并覆盖: src/UCG.Custodian.WebUI/Web.config 请在合并之前提交您的更改或隐藏它们。 中止 更新 ddd76137..b7ba45fa>>>

  1. 在可能只有一个 src/UCG.Custodian.WebUI/Web.config 的情况下撤消或提交该文件

  2. git pull

答案 9 :(得分:0)

我最终通过从文件资源管理器中删除我的repo来解决我的问题,然后从Visual Studio中选择&#34;撤消所有更改&#34;当注册的删除被提交时。恢复repo后,Visual Studio与git串联运行。

答案 10 :(得分:0)

问题在于,某些文件的拉取路径有时与存储库数据库中的等效文件不匹配,因为比较是区分大小写的。

例如,你可以拥有&#34; MyLibrary \ ABC \ Folder \ MyFile.cs&#34;在存储库中但是&#34; MyLibrary \ Abc \ Folder \ MyFile.cs&#34;在磁盘上。在&#34; git status&#34;中没有检测到任何变化。但Visual Studio将阻止分支切换。

在这种情况下仅从磁盘删除MyFile.cs无法解决问题 - 您需要删除ABC目录,然后撤消Visual Studio的更改以重新创建具有正确名称的文件夹结构。

答案 11 :(得分:0)

在我已经提交文件后,将文件名从小写字母开始更改为大写字母后,我遇到了此问题。我通过更改文件的名称来修复它(我刚刚在末尾添加了&#39; 1&#39;然后提交了更改)。然后我能够切换分支。

如上所述,我必须更改&#39;显示输出:&#39;组合来源控制 - Git&#39;在“输出”窗口中,为了查看有问题的文件的名称,然后向我显示文件名VS / git期望不是大写的,其中解决方案资源管理器/文件系统上的名称大写

答案 12 :(得分:0)

对我有用的一件事是: -    1)右键单击要结帐的分支。
2)单击“重置”选项 3)单击删除更改( - 硬)
4)右键单击分支并选择结帐

答案 13 :(得分:-1)

我遇到同样的问题然后我注意到未提交的更改来自不同的项目。一旦我做出了这些改变,它就让我改变了分支。