首页 > 解决方案 > 为什么 git 不显示我的文件已修改?

问题描述

更改文件

我修改了磁盘上的一个文件,运行git status,说没有任何改变。运行git update-index --really-refresh并显示修改后的文件。

几周以来,我每天都会遇到几次这个错误,我怀疑它是一个新的 git4win 错误,甚至可能与 Windows 文件系统有关。自从 15 年前出现以来,我一直在使用 git,所以它不是“我忘记了 X”。在过去的两个小时内,我已经发生了四次错误。然后我什至有一个小时的午休时间!

$ git --version
git version 2.23.0.windows.1

坏理论

我最初认为这可能与我单独安装的适用于 Linux-git 的 Windows 子系统有关。删除该安装并再次克隆我的所有存储库(第 N 次)后,我仍然收到此错误。

修改添加的文件

git 缺少我修改过的文件也适用于已经添加但此后被修改过的文件。这导致我提交+推送许多我已经查看+编译的文件(在我的 IDE 或 cli 中),但它们的内容并不相同,而且确实如此。当我运行时update-index --really-refresh,我看到我已经推送了最初添加的文件,但没有推送我修改和编译的文件。

它不是什么

这与 git ignore 无关,因为这发生在已经添加的文件上(参见上面的第二种情况)。它与 WSL 没有直接关系,因为我在那里卸载了 git。我没有奇怪的 git 设置:

core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
credential.helper=manager
diff.astextplain.textconv=astextplain
user.name=Jonas Bystrom
user.email=...
core.autocrlf=true
core.pager=less -F -X
core.longpaths=true
alias.ca=commit -a
alias.nb=checkout -b
alias.quicklog=log --pretty=format:"%h %cr %cn %Cgreen%s%Creset"
alias.logdiff=log -p --stat
alias.search=log --source --all -p --decorate=full -G
push.default=upstream
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
remote.origin.url=ssh://...
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

我不知道该尝试什么。欢迎任何有关尝试的指示!

标签: gitmsysgit

解决方案


直接原因是我的文件“假定未更改”,您可以通过以下方式检查

$ git ls-files -v pom.xml
h pom.xml

h标志意味着 git 在查找修改后的文件时应该忽略它。通过以下方式修复:

git update-index --no-assume-unchanged pom.xml

编辑 2:我错误地向IDEA 社区版提交了一个错误,而根本原因是我的公司主目录 ( H:\) 有一个 .gitconfig,其中包含core.ignoreStat=true. 我在 bash.exe/msys ( C:\Users\xxx\) 中使用的 .gitconfig 没有。通过设置修复core.ignoreStat=false


推荐阅读