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

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

我已经在VisualStudio.com上为vs 2013解决方案设置了Git存储库。当我习惯使用tfs(在git模式下)时,存储库工作得很好。

然后我决定熟悉这些分支,于是我创建了一个脱离主分支的分支。我在这一科做了不少改动。随着时间的推移,我已提交了更改,并执行了同步以将我的本地提交推送到VisualStudio.com存储库。这一切都有效。

我遇到的问题是,我不知怎么地失去了切换回主分支的能力。我无法将新创建的分支合并到master中。每次我尝试做任何涉及主控形状的事情时,在vs中都会出现以下错误:

Cannot switch to master because there are uncommitted changes. Commit or undo your changes before you switch branches. See the Output window for details.

输出窗口从不包含任何"详细信息"…

此消息所指的"未提交的更改"是什么?因为我无法进入主分支,所以我无法提交它的任何更改(我也不确定要这样做吗?)。我所在的当前(唯一其他)分支已提交并同步。

我只是在学习tfs、git和源代码管理。如何安全地从这个问题中恢复?


好吧,我和RWKIII有同样的问题-这是Visual Studio中的一个bug,不容易修复。症状如下:

Visual Studio声明您不能合并/切换braches/etc,因为您已经提交了未提交的更改—这很好,除非提交了所有更改。

Cannot switch to master because there are uncommitted changes. Commit or undo your changes before you switch branches. See the Output window for details.

这是一个更清晰的截图。

如果您查看输出窗口,它可能显示为空,但您必须将"显示输出从"更改为"源代码管理-git"。这将列出Visual Studio认为已更改的文件。

Make sure

现在,我尝试过的事情没有解决它(所以你不必):

  • 重新启动Visual Studio
  • 重新启动机器
  • 交换项目
  • 使用外部Git工具(所有这些工具都说"没有变化")。
  • Git重置
  • 对文件进行任意更改并提交。承诺行,vs仍然认为还有更多的变化

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

氧化镁

不是最理想的解决方案,但它似乎能解决问题。


我使用git命令提示来解决这个问题。我不能保证这是最好或唯一的方法,但它在Visual Studio 2013中对我很有效。

在团队资源管理器的"更改"下,选择"打开命令提示"。

在命令提示中键入:

git status

它将列出为更改而打开的文件。

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

git checkout -- mysubdir\myfile.ext

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

相反,在命令提示下,切换到相关分支。

git checkout branchname

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

高温高压


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

在brancha上提交更改、与master合并并通过git bash推送之后,下次我在vs中打开项目并查看团队资源管理器时,发现master分支上有更改。通过git bash检查状态时没有显示任何更改,但在vs输出中列出了10个文件。所有文件上的差异未显示任何更改。我在这一点上尝试了一个提交修改,但它不允许我修改以前的提交(请参阅下面的更多内容,因为最终这将解决我的问题)。

尝试在vs中切换到brancha,并收到消息,由于未提交的更改,无法切换。通过git bash切换到brancha,状态显示没有更改。刷新vs团队资源管理器,所以它现在在brancha上,显示14个文件更改,甚至超过master,但同样,所有文件上的diff都没有显示任何更改。

在团队资源管理器中的brancha上,我单击了Actions->AmendPrevious Commit。这次它让它发生,所有的更改都被清除了。然后它显示了一个挂起的提交,但是检查Git-Bash上的状态没有显示任何挂起的内容,所以回到团队资源管理器的主页并返回,清除了挂起的提交消息。

在团队资源管理器中切换到master,也没有显示更多更改。一切都好。


嗨,这对我有好处…

尝试使用命令提示团队资源管理器>未同步提交>操作>打开命令提示

Do a git checkout branchName


未斜接的更改意味着您修改了一个或多个已经添加到Git的文件,而这些更改没有在提交或Git存储中"保存"。

当您在分支之间切换时,不允许有未斜接的更改(但尚未添加到Git的新文件可以),因为其他分支中的更改可能会覆盖未斜接的更改。

我不熟悉Visual Studio如何与Git集成,因为我自己将poshgit与PowerShell结合使用。

继续的方法是:

  • 撤消更改
  • 提交您的更改
  • 或者隐藏您的更改(请参阅中断的工作流部分)。


1:打开Git bash

2:指向Git存储库

3:使用命令"git status检查您的分支状态。

如果您对其他分支的更改有任何可用性,请使用"git stash save",(这将在本地保存您的更改,您可能会遇到一些冲突错误,您可以忽略现在)如果您在git status result中看到任何未合并的文件,并且希望保留这些更改,请使用"git add "。

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

这会将本地分支重置为原始签出,现在可以切换了可以在Visual Studio团队资源管理器>更改中看到冲突文件的分支,如果不想保留该文件更改,请右键单击并选择"撤消更改"或"使用""git add "将此文件与其他保存的文件一起添加。

5:现在您的Git分支已经准备好进行切换,键入"git checkout "

6:若要弹出保存的更改,请使用"git stash pop",这将合并您当前分支中保存的更改。


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

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

  • 在vs中,在输出窗口中查看导致问题的文件。
  • 在Git-Bash中运行git update-index --no-assume-unchanged TheNameOfTheFileCausingTheIssue
  • 在vs撤消签出此文件中
  • 在vs中,更改管理分支中的分支。
  • 这可能适用于你的情况,也可能不适用于你的情况,但我已经添加了它,以防它将某人带向正确的方向。在运行之前,请确保您了解git命令!


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

    1
    git status (this should show you culprit files)

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

    1
    git add -A

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


    对我有用的一件事是:1)右键单击要签出的分支。2)单击重置选项。3)点击删除更改(--hard)4)右键单击分支并选择"签出"。


    在提交文件后,将文件名从小写字母改为大写字母后,出现了这个问题。我通过更改文件名(我刚在末尾添加了一个"1")并提交更改来修复它。然后我就可以换树枝了。

    如前所述,我必须在输出窗口中将"show output from:"组合更改为"source control-git",以便查看有问题的文件的名称,然后显示文件名vs/git未大写,其中,在解决方案资源管理器/文件系统中的名称大写。


    问题是,有时在拉取到某些文件的路径之后,它们与存储库数据库中的对应文件不匹配,因为比较是区分大小写的。

    例如,存储库中可以有"mylibraryabcfoldermyfile.cs",磁盘上可以有"mylibraryabcfoldermyfile.cs"。在"Git状态"中不会检测到任何更改,但Visual Studio将阻止分支开关。

    在这种情况下,仅从磁盘中删除myfile.cs并不能解决问题-您需要删除abc目录,然后撤消对Visual Studio的更改,以便用正确的名称重新创建文件夹结构。


    我最终解决了我的问题,从文件资源管理器中删除了我的repo,然后从Visual Studio中选择了"撤消所有更改"(在注册要提交的删除时)。在恢复报告后,Visual Studio与Git一起按预期运行。


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