問題描述
Windows 或者 macOS 操作系統中,文件名是不區分大小寫的。對於已經提交到倉庫中的文件修改文件名的大小寫,然后又用 git rm 命令將老文件從 Git 倉庫刪除掉,並保存下新的文件,這個時候,再進行切換分支的操作,就會出現這個提示:
復現
# 新建測試文件夾並切換到這個文件夾下面 mkdir test-checkout-error && cd test-checkout-error # 新建空 Git 倉庫 git init # 新建測試文件 user.php touch user.php # 暫存新增文件 git add . # 發現文件名大小寫錯誤,進行修正 mv user.php User.php # 再次暫存新增文件 git add . # 提交到倉庫 git commit -m "add user.php and User.php" # 在當前分支基礎上新建分支 dev git checkout -b dev # 刪除索引中的 user.php git rm --cached user.php # 提交到倉庫 git commit -m "delete user.php" # 切換分支,報錯 git checkout master error: The following untracked working tree files would be overwritten by checkout: user.php Please move or remove them before you can switch branches. Aborting
分析
由於 Windows 或者 macOS 系統對於文件名是不區分大小寫的,如果在 Git 倉庫中應用了 ignorecase 的缺少配置 false,那么 Git 會區分文件名的大小寫。
解決
在當前項目目錄下執行
git config core.ignorecase true
然后再切換分支,進行分支合並等操作之后,再執行
git config --unset core.ignorecase
刪除剛才的配置操作。
參考鏈接:git - The following untracked working tree files would be overwritten by checkout - Stack Overflow