Visual Studio不会撤消我的git更改

时间:2016-11-08 08:14:41

标签: git visual-studio-2015 version-control

出于某种原因,我的VS不会在“撤消更改”之后从更改视图中删除文件:

enter image description here

当我查看差异时,实际更改已消失,但我希望文件不显示。我想知道一个永久的解决方案。我已经知道我可以在VS之外进行藏匿或类似操作来隐藏文件。

编辑:

我找到了解决办法。当我撤消时,然后剩下的文件选择阶段,它们就会消失!

1 个答案:

答案 0 :(得分:4)

根据您的描述(撤消不会更改文件列表,暂存会强制更新),这听起来像是与 Visual Studio 2015 和 2017 相关的以下问题:

https://developercommunity2.visualstudio.com/t/shGitsh---shUndosh-changes-doe/681074?space=8&q=git+undo+2015

据微软称,Visual Studio 2019 也受到影响。该问题现在正在此 issue 中进行跟踪:

https://developercommunity2.visualstudio.com/t/Undo-changes-with-new-git-experience-pre/1170228

根本原因似乎与行尾有关:

微软:

<块引用>

所以我们怀疑可能是 dotnet format 重写了行尾(并且只有行尾),所以现在 git status 报告有更改的文件。但是,如果您尝试实际 checkout-index,git 实际上不会改变任何东西。然而, git status 相信有变化,因为 stat-block 导致它相信已经发生了变化(因为已经发生了变化)。 验证这一点的一种方法是从命令行或 Visual Studio。 暂存所有内容(git add *)(您可以通过右键单击> stage 从visual studio执行此操作) git status (或者,如果在 Visual Studio 中,它将自动刷新状态) 如果文件从视图中消失,则存在行尾问题,并且 git 突然意识到它们实际上是同一个文件。

记者:

<块引用>

是的!暂存一切使所有文件消失:-)

微软:

<块引用>

酷!所以这就是我们所知道的! 对于仅限 EOL 的更改,SHA 更改不会更改。 Git 显然在内部将这些存储为 LF-only checkout 和 checkout-index 都不会覆盖磁盘上的文件 基本上,由于 git 是我们这里的真相来源,我们会得到误导性信息。但是,我认为 git 可能在性能方面做出了正确的决定。话虽如此,从用户体验的角度来看,这非常令人困惑,因此我们将对此进行评估。 我们正在评估如何改进这种用户体验。

问题仍然存在,但似乎已经确定了根本原因。目前,只有解决方法。