解决git无法切换分支(The following untracked working tree files would be overwritten by checkout)

解决git无法切换分支(The following untracked working tree files would be overwritten by checkout)

893发表于2020-05-27

今天遇到一个git无法切换分支的问题,在这里分享给大家。

from clipboard

一、问题现象

git checkout master

出现下面错误:

error: The following untracked working tree files would be overwritten by checkout:

但是用git status是干净的。

from clipboard

二、分析原因

经过分析本地没有ignore且没有删除过文件,最后定位到了之前重名文件(大小写)设置的core.ignorecase=false的坑。

查看git配置信息:

 git config -l

from clipboard

看到有以下配置:

core.ignorecase=false


三、解决办法

core.ignorecase设置为true

git config core.ignorecase true

再次切换分支,成功!

from clipboard


四、扩展阅读

当git上只做文件大小写重命名的修改时,如何躲坑:


https://www.cnblogs.com/wangzehuaw/p/6812227.html


一、 git提交时

假设修改ABC.java为Abc.java。

1.1 如果使用git命令进行仅涉及大小写的重命名

1.1.1 设置git库为大小写敏感(不建议)
$ git config core.ignorecase false
用这种方法进行重命名,用git status就可以识别出修改了,但是不推荐用这种方式,因为在更新这种修改的时候会有麻烦。

1.1.2 使用git mv命令(仅当core.ignorecase为true时可用)

$ git mv ABC.java Abc.java

$ git status......           

renamed: ABC.java -> Abc.java
此时的状态是renamed,git commit即可。

1.2 如果使用Eclipse进行仅涉及大小写的重命名

无论core.ignorecase设置为true还是false或者没有设置该项,修改之后均可正常提交,在进行Commit的时候,对话框中显示的修改文件列表有:

即删除ABC.java并增加Abc.java,直接commit然后push即可。
偶尔会出现在Eclipse端修改完之后右键commit为灰色的情况,这时候如果使用git status发现有renamed状态的修改的话,也可以直接在git bash上commit并push。

二、 git更新时

可能更多的问题出现在更新时。

2.1 如果使用git命令更新内容

core.ignorecase不为true时会出现如下错误:
......error: The following untracked working tree files would be overwritten by merge:        Abc.java.......
或者在切换分支等操作的时候莫名出现这样的错误,解决方法都是将core.ignorecase设置为true,然后再进行操作。

2.2 如果使用Eclipse更新内容

测试发现无论core.ignorecase如何设置均木有问题。

三、总之

在涉及到只修改文件名大小写的提交和更新时,

3.1 全部使用Eclipse来进行是最稳妥的;


3.2 如果喜欢使用git命令,将core.ignorecase设置为true即可:

git config core.ignorecase true

小编蓝狐