git diff位于.gitignore中但已添加用于跟踪的文件上

git diff位于.gitignore中但已添加用于跟踪的文件上,git,Git,存档 config/config.py 该文件位于.gitignore中。我需要进行更改以添加到我自己的克隆。但是,不希望更改.gitignore本身:我们希望大多数用户不会看到此文件 所以我做了 git add -f config/config.py 然而 git diff config/config.py 什么也看不出来 更正我在原始版本中声明 git status 什么都不显示:那不是真的,它确实显示了 new file: config/config.py 因此,似乎只有使用g

存档

config/config.py

该文件位于.gitignore中。我需要进行更改以添加到我自己的克隆。但是,不希望更改.gitignore本身:我们希望大多数用户不会看到此文件

所以我做了

git add -f config/config.py
然而

git diff config/config.py
什么也看不出来

更正我在原始版本中声明

git status
什么都不显示:那不是真的,它确实显示了

new file:   config/config.py
因此,似乎只有使用git diff命令才令人惊讶


(有点离题:一般来说,整个.gitignore/tracked vs untracked是一个令人惊讶的棘手/痛苦的过程。我已经研究了许多关于这个主题的SOF,但它们在这里并不可靠。)

git diff
显示了暂存区域(也称为索引)和工作树之间的差异。您刚刚将文件添加到暂存区域,因此,
git diff
不显示任何内容是完全正常的。你想跑吗

git diff HEAD
相反。这将显示文件和
HEAD
之间的差异,这意味着“最后一次提交”。如果文件不在
头中
,则差异将显示整个文件

您似乎运行了
git rm--cached
,并且之前进行了提交,因此文件不在
HEAD
中。你以前犯过一个错误,如果你不明白自己在做什么,试图修复这个错误可能会更危险。如果您想尝试,那么就学习如何在Git中重写历史

如果希望在历史记录中查看具有提交历史记录的差异,请运行

git diff <commit-id>
git-diff

这与文件位于
.gitignore

中这一事实完全无关。我刚刚创建了一个类似的场景,
git add-f
为我完成了这项工作。你确定没有跟踪该文件吗?使用
git ls files
查看所有跟踪的文件。尝试
git add-f-v config/config.py
:当实际添加文件时,
-v
选项告诉
git add
显示消息。@MatthieuMoy它被跟踪了-我的原始语句不正确。但是git diff仍然没有显示任何内容。因为它忽略了本地副本,并且没有任何可与之比较的内容?如果您执行git diff HEAD config/config.py,是否有任何输出?@cerkiewny您的命令不起作用,请您编辑特定语法“HEAD:工作树中没有这样的路径”。他还使用git rm删除了文件的本地历史记录--cached添加关于它的注释,您有我的+1。实际上,整个过程仍然不起作用。应该做什么来代替“git add-f”?这是不记得该文件已经存在。所以“git diff”不能正常工作-它丢失了历史记录。