跨设备出现的git变更无法撤销

最后更新: 2025-11-21

起因是最近用git subtree组了一个monorepo仓库出来,得益于1000+的commit数以及公司的奇特网路使用机器拉代码十分慢。

于是将拉好项目的.git文件从mac上转到了公司的win机器上,这个时候发现仓库中有几个没有改动的文件出现在vscode的文件管理中的change上,而且怎么撤销都是失败。

这里收集到可能的原因:

1. 行尾符问题

  • 问题:文件的行尾符在 Windows(CRLF) 和 Unix(LF) 之间转换
  • 解决:

在项目根目录执行

Plain
1git config core.autocrlf false

2. 文件权限变化

  • 问题:文件的可执行权限发生了变化
  • 解决:
Plain
1git config core.filemode false

3. 编码问题

  • 问题:文件编码被自动转换
  • 解决
Plain
1git config core.safecrlf warn

我在一通处理后,定位到问题是 文件权限变化

这里可能的问题根源在:

当你在 Linux/macOS 系统或 WSL 中工作时:

  • Git 默认会跟踪文件的 可执行权限(755 vs 644)
  • 如果用  chmod  或其他方式改变了文件权限
  • Git 会检测到这种变化并显示在变更列表中