我对git工作目录中的文件进行了任意更改。
git status
无法识别文件已更改。
git add /path/to/file
无效。
git add -f /path/to/file
无效。
git status /path/to/file
将文件显示在“要提交的更改”存储桶中。
我删除了我的.gitignore文件,只是为了确定。没有改变上述任何行为。
我完成了git reset --hard
,重新做了我的改变。没有改变上述任何行为。
这可能会发生什么?
答案 0 :(得分:26)
另外请确保您没有手动更新索引,以假设更改的文件未更改,如下所示:
git update-index --assume-unchanged path/to/file
听起来我听起来很愚蠢,然后几天后对文件进行了更改,无法弄清楚为什么git没有跟踪它。我尝试了以上所有建议,并且不停地拉出我的头发b / c已更改的文件未列在任何.gitignore
或exclude
文件中。
如果您告诉git假设文件未更改,则必须:
git update-index --no-assume-unchanged path/to/file
或者只是重新克隆回购,就像我记得我做过之前最后做的那样......
答案 1 :(得分:16)
原来我在我的文件 [1]
上添加了skip-worktree
git update-index --skip-worktree path/to/file
忘记了。您可以通过以下方式撤消此操作:
git update-index --no-skip-worktree path/to/file
带有ls-files
的 -v
在我的案例中显示了该文件的状态:
git ls-files -v | grep path/to/file
S path/to/file
字母git ls-files -v
前缀为are和mean:
# H: cachead
# S: skip-worktree
# M: unmerged
# R: removed/deleted
# C: modified/changed
# K: to be killed
# ?: other
# lowercase letter: assume-unchanged
git check-ignore * **/* | grep path/to/file
git ls-files --exclude-standard --ignore
如果列出了该文件,则会在某处将忽略规则排除在外。 [2] [3]在其中一个文件中找到它:
less .gitignore
less ~/.gitignore
less %USERPROFILE%\.gitignore # <- Probably the same file as the above one
less $( git config --global core.excludesfile )
less $( git config --system core.excludesfile )
less ${GIT_DIR:-.git}/exclude
assume-unchanged
git ls-files -v | grep path/to/file
如果文件的前缀是小写字母,则标记为assume-unchanged
。修复它:
git update-index --no-assume-unchanged path/to/file
skip-worktree
git ls-files -v | grep path/to/file
如果文件的前缀为S
,则会标记为skip-worktree
。修复它:
git update-index --no-skip-worktree path/to/file
答案 2 :(得分:9)
Git忽略文件的原因有两个:gitignore
和submodules
。
更具体地说,以下条件会导致Git在调用“git add
”时忽略文件:
$GIT_DIR/exclude
中的模式匹配。.gitignore
文件中的模式匹配。.gitignore
文件中的模式匹配(由“git config --global core.excludesfile
”指定)。更多信息可以在另一个SO问题中找到:
答案 3 :(得分:6)
答案 4 :(得分:4)
您检查全局git ignore文件?
git config --global --get-all core.excludesfile
git config --system --get-all core.excludesfile
如果其中任何一个返回文件作为其值,请查看该文件。
答案 5 :(得分:2)
如果您的文件位于“要提交的更改”存储桶中,那么git 已经识别更改并将提交它!它在索引已经。否则它将在“已更改但未更新”的存储桶中。
<强>:)强>
希望这会有所帮助/
答案 6 :(得分:1)
您确定父文件目录中的某些.gitignore文件没有排除您的文件吗?
答案 7 :(得分:0)
你做了git add之后,你做了一次提交,所以它实际上是在repo中,可以与(改变的)工作副本进行比较吗?
答案 8 :(得分:0)
检查相关文件中的每个父目录到.gitignore文件的项目根目录。
有些项目使用多个.gitignore文件,每个文件都在自己的目录中,而不是根目录中的单个.gitignore。