如何移除Git中含退格符\b的文件或文件夹?
解决Git仓库中含退格符(\b)的文件夹问题
一、在MacOS上移除带退格符的文件夹
方法1:直接用git rm操作(推荐)
由于shell会解析\b字符,直接输入路径会失效,可通过以下两种方式传递正确路径:
用
printf生成带退格符的路径
在仓库根目录执行:git rm -r "$(printf 'dir1/dir2/dir3/\btarget')"这条命令会让
printf输出包含实际退格符的路径,再传递给git rm完成删除。手动输入退格符
在终端输入路径时,输入dir1/dir2/dir3/后,按下Ctrl+H(退格符对应的键盘输入),接着输入target,最终执行:git rm -r dir1/dir2/dir3/[此处为Ctrl+H输入的退格符]target
完成删除后,提交并推送修改:
git commit -m "Remove directory containing backspace character" git push origin main # 替换为你的目标分支名
方法2:通过Git索引移除
如果git rm仍报错,可直接操作Git索引:
先查看索引中该文件夹下的文件:
git ls-files --stage | grep target你会看到类似
100644 xxxxxxxx 0 dir1/dir2/dir3/\btarget/file.rb的条目。移除索引中的对应条目:
git update-index --remove "dir1/dir2/dir3/\btarget/file.rb" # 若要删除整个文件夹,可批量处理 git update-index --remove "dir1/dir2/dir3/\btarget/*"提交并推送修改,步骤同方法1。
方法3:重写Git历史(彻底清除痕迹)
如果需要彻底从历史记录中移除该文件夹,避免后续其他问题,可使用git filter-repo:
先安装
git-filter-repo(MacOS下用Homebrew):brew install git-filter-repo在仓库根目录执行重写命令:
git filter-repo --path "dir1/dir2/dir3/\btarget" --invert-paths强制推送到远程仓库(注意:此操作会覆盖远程分支历史,需告知所有协作开发者重新拉取):
git push origin main --force
二、解决Windows无法检出的问题
在Mac上完成上述操作并推送修改后,Windows用户重新克隆或拉取仓库即可——远程仓库已不再包含带退格符的文件夹,Windows系统不会再因文件名规则报错。
内容的提问来源于stack exchange,提问作者Glaucus
相关产品推荐
相关产品推荐

