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

Windows环境下Git因换行符差异误提交未修改文件的解决求助

解决Git换行符差异导致未修改文件误提交的问题

一、彻底重置仓库换行符状态

先让本地仓库与远程仓库的文件换行符完全统一,清除已存在的差异:

  1. 暂存当前未提交的修改(若有):
    git stash
    
  2. 重置本地分支到远程分支的最新状态:
    git reset --hard origin/[你的目标分支名]
    
  3. 清除Git对已跟踪文件的换行符缓存:
    git rm --cached -r .
    
  4. 设置适配Windows的换行符配置,确保.gitattributes规则生效:
    git config core.autocrlf true
    
  5. 重新添加所有文件,让Git按配置处理换行符:
    git add .
    
  6. 提交这次换行符统一的变更(一次性操作,后续不会再出现同类差异):
    git commit -m "统一仓库换行符规则,匹配Windows与Salesforce组织格式"
    
  7. 推送变更到远程仓库:
    git push
    

二、针对性配置.gitattributes(适配Salesforce组件)

给Salesforce专属元数据文件单独设置换行符规则,避免全局配置冲突:

# Salesforce文本类元数据强制使用LF(匹配Salesforce组织的换行符)
*.cls text eol=lf
*.trigger text eol=lf
*.page text eol=lf
*.component text eol=lf
*.resource text eol=lf
*.xml text eol=lf

# 二进制文件保持原始格式,不做换行符转换
*.png binary
*.jpg binary

三、优化自动化脚本的拉取后处理

在Ant拉取Salesforce组件完成后,添加一步换行符统一操作,确保拉取的文件直接符合仓库规则:

  • 若使用Windows命令行,可借助dos2unix工具(需提前安装)批量转换:
    dos2unix src/classes/*.cls src/triggers/*.trigger
    
  • 若使用PowerShell,可直接用内置命令转换:
    Get-ChildItem -Path src/ -Include *.cls,*.trigger,*.page -Recurse | ForEach-Object {
        $content = Get-Content $_.FullName -Raw
        $content -replace "`r`n", "`n" | Set-Content $_.FullName -NoNewline
    }
    

问题根源说明

之前的全局core.autocrlf和简单.gitattributes配置未生效,是因为本地已存在大量换行符不一致的文件,Git的缓存机制导致旧规则仍然生效。只有先重置仓库状态,让Git重新识别所有文件的换行符规则,再配合针对性的后缀配置,才能从根源解决未修改文件因换行符被误提交的问题。

内容的提问来源于stack exchange,提问作者Ritvik Bhomia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:12:43