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认为已更改的文件。
。
现在,我尝试过的事情没有解决它(所以你不必):
- 重新启动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:使用命令"
如果您对其他分支的更改有任何可用性,请使用"
4:保存本地更改后,使用命令"
这会将本地分支重置为原始签出,现在可以切换了可以在Visual Studio团队资源管理器>更改中看到冲突文件的分支,如果不想保留该文件更改,请右键单击并选择"撤消更改"或"使用""
5:现在您的Git分支已经准备好进行切换,键入"
6:若要弹出保存的更改,请使用"
我们经常遇到这个问题,因为我们有一个特定的文件,必须始终从更改中排除,但有时会发生更改。
当出现错误消息时,对我们有用的是:
这可能适用于你的情况,也可能不适用于你的情况,但我已经添加了它,以防它将某人带向正确的方向。在运行之前,请确保您了解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一起按预期运行。
我遇到了同样的问题,然后我注意到未提交的更改来自不同的项目。一旦我提交了这些更改,它就允许我进行分支更改。