错误变基:不存在的未跟踪文件将被覆盖

Error rebasing: non existing untracked files would be overwritten

我正在尝试将几个提交压缩为一个。所做的更改涉及更改文件内容,以及仅更改某些文件或其目录的文件名大小写。

当运行git status,

nothing to commit, working tree clean

然而,当我 rebase -i <sha>,

error: The following untracked working tree files would be overwritten by checkout:
        myDir/file1
        myDir/file2
        ...
        myDir/fileN
Please move or remove them before you switch branches.
Aborting

在我试图压缩的提交历史的某个时刻,myDir 被重命名为 MyDir

但是,none 这些文件实际上在我的磁盘上。 运行 ls 显示新的 MyDir,但没有 myDir.

我怎样才能解决这个问题以便我可以变基?

fyi,.git/config 中的 [core] 中的 ignorecase = false 我在 Mac OSX

core.ignorecase 设置是 Git 跟踪 操作系统实际行为方式 的方式。如果 Git 可以创建一个名为 README 的文件,然后使用名称 readme 打开它,那么您的 OS 的文件系统 不区分大小写。这意味着您的OS不能创建两个单独的文件,它们的名称只是大小写不同。

这也适用于目录。如果 MyDir 存在,Git 尝试创建 myDir 以保存名为 myDir/file1 的文件等将失败(在某种程度上 Git 认为几乎无害,即目录已经存在),因为 OS 将只使用现有的 MyDir。 Git 尝试写入 myDir/file1 然后将覆盖 MyDir/file1 文件。如果这些文件当前包含有价值的数据,您将希望将它们移开,正如 Git 所建议的那样。在任何情况下,您可能希望将整个 目录 MyDir 移开,以便 Git 可以创建一个拼写为 myDir(小写 m).

如果您的操作系统/文件系统确实不区分大小写——如果您可以创建不同的文件,所有文件都命名为READMEreadmeReadMe 等等——您可以更改 core.ignorecase 设置以通知 Git 这一事实。但是,如果您的系统不区分大小写,将其更改为 Git 将是一个坏主意。