You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS环境下拉取Git develop分支后自动出现文件删除状态的原因咨询

Git Pull后自动出现文件删除标记的常见原因

这种情况我之前在MacOS上处理过好几次,结合Git的工作逻辑和MacOS文件系统的特性,主要有这几个常见原因:

  • 远程分支存在删除文件的提交
    你拉取前本地仓库是干净的,但远程的develop分支可能在你上次同步之后,有其他开发者提交了删除这两个文件的变更。git pull本质是git fetch + git merge的组合操作,拉取远程最新提交后,合并过程会自动把远程的删除操作同步到你的本地工作区——这时候本地的对应文件会被删除,git status自然会显示它们为已删除状态。
    你可以用git log --oneline develop..origin/develop查看本地和远程分支的差异提交,或者直接用git diff develop origin/develop对比文件变更,确认是不是有删除这两个文件的提交。

  • MacOS文件系统大小写不兼容
    Git默认是严格区分文件名大小写的,但MacOS的默认文件系统(APFS)默认是不区分大小写的(除非你格式化磁盘时特意开启了大小写敏感)。如果远程分支里的这两个文件被修改了大小写(比如MyFile.txt改成了myfile.txt),在MacOS上系统会把这两个文件名视为同一个文件,但Git会认为原来的文件被删除、新的文件被创建。这时候你可能看不到本地文件实际被删除,但git status会标记原文件名的文件为已删除。
    你可以检查远程分支的文件名变化,或者临时执行git config core.ignorecase false开启Git的大小写敏感(注意:这个操作可能导致本地其他大小写相关的文件冲突,用完建议改回默认),然后重新拉取验证。

  • 稀疏检出(Sparse Checkout)配置变更
    如果你的仓库开启了稀疏检出功能(只检出仓库中的部分文件/目录),之前的配置可能包含这两个文件,但远程分支的最新提交修改了稀疏检出规则,或者这两个文件被移出了检出范围。当你执行git pull后,Git会自动删除本地工作区中不在稀疏检出范围内的文件,从而在git status中显示为已删除。
    你可以用git config --get core.sparseCheckout查看是否开启了该功能,如果返回true,再检查.git/info/sparse-checkout文件的内容,确认这两个文件是否还在检出列表中。

  • Git钩子自动执行了删除操作
    仓库的.git/hooks目录下可能存在post-merge或post-checkout钩子脚本,这些脚本会在git pull完成后自动运行。如果脚本中包含删除这两个文件的逻辑,就会导致拉取后文件被自动删除,进而在git status中显示变更。
    你可以打开.git/hooks目录,查看有没有启用的钩子脚本(文件名不带.sample后缀的就是启用的),检查脚本内容是否有相关删除操作。

快速排查步骤

  1. 先执行git fetch origin develop拉取远程最新代码,不进行合并;
  2. 用git diff develop origin/develop对比本地和远程分支的文件差异,确认是否有删除操作;
  3. 根据上面的几个原因,逐一排查大小写、稀疏检出、钩子等配置。

内容的提问来源于stack exchange,提问作者Akshay Vijay Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:18:10