git - 为什么 git 不显示我的文件已修改?

标签 git msysgit

更改文件

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

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

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

糟糕的理论

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

修改已添加的文件

git 丢失我修改的文件也适用于已经添加但之后修改过的文件。这导致我提交+推送了很多我已经审查+编译过的文件(无论是在我的 IDE 中还是在 cli 上),但它们的内容并不相同,而且确实如此。当我运行 update-index --really-refresh 时,我发现我已经推送了最初添加的文件,但没有推送我修改和编译的文件。

它不是什么

这与 gitignore 无关,因为这发生在已经添加的文件上(参见上面的第二种情况)。它与 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

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

最佳答案

直接原因是我的文件已经“假设不变”,你可以通过查看

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

那个 h 标志意味着 git 在查找修改的文件时应该忽略它。修复方法:

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

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

关于git - 为什么 git 不显示我的文件已修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58182974/

相关文章:

git - 暂时锁定一个 git 仓库

git - 进行简单的一次提交挤压的更简单方法?

git - 当我得到 "TortoiseMerge cannot be used without a base"时我该怎么办?

git - 设置 Git/SmartGit SSH 客户端的主文件夹

GIT .mailmap 按 repo 协议(protocol)工作,但在全局范围内不工作,为什么?

git svn show-ignore 给出错误 "command returned error: 1"

python - 使用 virtualenv 时我应该提交/bin 目录吗?

git - 为每个 git repo 配置 ssh key

Git 允许在 merge 冲突期间丢失文件更改历史记录

git - 有没有一种简单的方法可以更改为以前活跃的分支?