git - 无法解决的 Git 错误 : The following untracked working tree files would be overwritten by checkout

标签 git branch

我在 Visual Studio 2010 中单独使用 Git 进行我的本地软件项目。最近我创建了一个新分支来对其中一个对话窗口进行更大的重构。我做了以下修改:

  • 将 Form1 重命名为 Form1a(包括所有相关文件)
  • 添加新的 Form1

我将此更改检查到分支中,比如表单重构。有趣的是,Git 没有注意到我将文件 Form1.cs 重命名为 Form1a.cs 并创建了一个全新的、完全不同的 Form1.cs,而是它注意到了一个新的 Form1a.cs 文件并发现了它们之间的很多差异以前的和新的 Form1.cs 文件。这当然会导致完全垃圾的差异,但我不在乎这种情况,只要所有文件最终都得到正确处理即可。

然后我切换回 master 做一些其他的小改动。没有什么冲突。到目前为止,一切正常。

今天,我想切换回我的分支形式重构来继续这项工作。但我得到的只是以下消息:

git.exe checkout    form-refactoring

Aborting
error: The following untracked working tree files would be overwritten by checkout:
Form1.Designer.cs
Please move or remove them before you can switch branches.

那应该是什么?提到的文件不是未跟踪的。既不在 master 分支中,也不在 form-refactoring 分支中。它是两个分支的一部分,但一个不是另一个的后代。如果我删除它会发生什么,它会永远消失吗?如果我现在删除某些内容,我不相信 Git 会恢复正确的文件。除了我提到的 Git 操作之外,我根本没有玩过任何文件,那么为什么我现在应该玩任何文件以继续使用 Git 操作? Git 打破了它,Git 现在应该可以处理它了!

现在,我无法继续我的工作,因为我无法切换分支。对此有简单的解决方案吗?

Git 版本是 1.7.6,TortoiseGit 是 1.7.3。

最佳答案

未设置 core.ignorecase 配置选项,并且 Visual Studio 已重命名 .Designer.cs 文件以防万一,从大写“D”切换为小写“D”(反之亦然)。这就是最终的问题。将选项设置为 true 后,我花了一些文件历史记录分解(删除和重新添加文件)来解决此错误。实际上该选项是在一台计算机上设置的,但是在克隆存储库时,设置不知何故丢失了。然后命运只等着 VS 重命名那个文件来捕获我。

因此在 Windows 上,您始终需要确保这两个设置在任何初始化/克隆操作后都是正确的:

git config core.ignorecase true
git config core.autocrlf false

有些工具(TGit、gitscc 等)似乎做的不对。这对于在 Windows 上正常运行是绝对必要的,但 Git 不关心它们是否设置不正确,只是让你偶然发现它们而不告诉你原因。它在这件事上既有帮助也有帮助。

关于git - 无法解决的 Git 错误 : The following untracked working tree files would be overwritten by checkout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8839247/

相关文章:

git - 在 git merge 之后在 git log graph 中保留分支的提交历史

Git:如何在不覆盖历史记录的情况下恢复分支 merge ?

mercurial - 如何在 mercurial 中导出(hg 存档)命名分支?

mercurial - 关闭分行的目的是什么

git - 在 Git 中将多个提交 merge 为一个

git - SourceTree 终端无法推送,GUI 可以推送

git - 在 rebase 期间撤消文件更改

git - 在不丢失未提交工作的情况下切换分支

git - 从较旧的提交创建分支

git - 在 git 修订版中搜索方法调用