Windows环境下Git因换行符差异误提交未修改文件的解决求助
解决Git换行符差异导致未修改文件误提交的问题
一、彻底重置仓库换行符状态
先让本地仓库与远程仓库的文件换行符完全统一,清除已存在的差异:
- 暂存当前未提交的修改(若有):
git stash - 重置本地分支到远程分支的最新状态:
git reset --hard origin/[你的目标分支名] - 清除Git对已跟踪文件的换行符缓存:
git rm --cached -r . - 设置适配Windows的换行符配置,确保
.gitattributes规则生效:git config core.autocrlf true - 重新添加所有文件,让Git按配置处理换行符:
git add . - 提交这次换行符统一的变更(一次性操作,后续不会再出现同类差异):
git commit -m "统一仓库换行符规则,匹配Windows与Salesforce组织格式" - 推送变更到远程仓库:
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
相关产品推荐
相关产品推荐

