我试图将一些提交压缩成一个提交。所做的更改涉及更改文件内容,以及仅更改某些文件或其目录的文件名大小写。
当运行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上
core.ignorecase
设置是Git跟踪操作系统实际行为的方式。如果Git可以创建名为README
的文件,然后使用名称readme
打开它,则操作系统的文件系统不区分大小写。这意味着您的操作系统无法创建两个单独的文件,其名称仅在大小写不同。
这也适用于目录。如果MyDir
存在,Git尝试创建myDir
以保存名为myDir/file1
等文件将失败(在某种程度上Git认为大部分是无害的,即目录已经存在),因为操作系统将只使用现有的MyDir
。然后Git尝试编写myDir/file1
将覆盖MyDir/file1
文件。如果这些文件当前包含有价值的数据,您将需要将它们移开,就像Git建议的那样。在任何情况下,您可能都希望将整个目录MyDir
移开,以便Git可以创建一个拼写的myDir
(小写m
)。
如果您的操作系统/文件系统确实不是不区分大小写的 - 如果您可以创建名为README
,readme
,ReadMe
等的所有文件 - 您可以更改core.ignorecase
设置以通知Git这一事实。但是,如果你的系统不区分大小写,那么改变它将对Git说谎,这不是一个坏主意。