错误重新定位:将覆盖未存在的未跟踪文件

问题描述 投票:0回答:1

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

当运行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

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

我该如何解决这个问题,以便我可以改变?

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

git rebase
1个回答
2
投票

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

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

如果您的操作系统/文件系统确实不是不区分大小写的 - 如果您可以创建名为READMEreadmeReadMe等的所有文件 - 您可以更改core.ignorecase设置以通知Git这一事实。但是,如果你的系统不区分大小写,那么改变它将对Git说谎,这不是一个坏主意。

© www.soinside.com 2019 - 2024. All rights reserved.