Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git说我有未老化的更改,但我没有显示它们_Git_Git Filter Branch - Fatal编程技术网

git说我有未老化的更改,但我没有显示它们

git说我有未老化的更改,但我没有显示它们,git,git-filter-branch,Git,Git Filter Branch,我正在对要删除的第二个文件(第一个是JetBrains.idea文件夹文件,现在位于.gitignore中)执行此命令,但我无法: git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch gf5/console/basic.php' --prune-empty --tag-name-filter cat -- --all Cannot rewrite branches: You have unstage

我正在对要删除的第二个文件(第一个是JetBrains.idea文件夹文件,现在位于.gitignore中)执行此命令,但我无法:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch gf5/console/basic.php' --prune-empty --tag-name-filter cat -- --all
Cannot rewrite branches: You have unstaged changes.
所以,当git没有列出“未老化”的文件时,我如何知道它所指的是什么,以及如何修复这些文件

PS:问题不是隐藏,我没有,也没有在回购协议上做过任何隐藏

注意:我做了一个
git状态
并收到了以下信息:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   gf5/console/basic.php

Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)

//(and a whole long list of files)
要提交的更改:
(使用“git重置磁头…”取消分级)
修改:gf5/console/basic.php
未为提交而暂存的更改:
(使用“git add…”更新将提交的内容)
(使用“git签出--…”放弃工作目录中的更改)
//(还有一长串文件)

啊哈!!我知道发生了什么事。阅读最后几句话,获得一些见解

答案是首先要做:

git status
这以红色显示了修改后的文件,我想这意味着git在某种程度上“删除”了这些文件。然后我做了:

git add --all
从那时起,我使用SourceTree提交了所有暂存文件(很抱歉,我没有一直使用命令行)。我继续并同时将更改推送到服务器,但这是可选的

然后,上述命令成功运行

当我尝试在不同的文件上运行上述命令时,我遇到了相同的问题。所以我再次运行了
git status
,结果发现我刚刚从历史记录中删除的文件仍然存在,因此您需要执行以下操作:

git rm /previous_file_you_just_removed_from_history.php

同样要澄清的是,filter branch命令将从所有提交中删除该文件的历史记录,但不会删除您对该文件所做的更改。也就是说,删除的文件仍然是您在此之前对其所做的所有更改的总和。我希望这有助于为其他人澄清这一概念。

我也遇到了同样的问题,即我的所有文件在新克隆后都显示为已修改,并发现原因是(在我的情况下)在签出和提交时,Tortoise Git会自动修改每个文件的行尾


要防止此行为,请禁用存储库设置窗口下的
AutoCrLf
设置(
Git
->
Config Source[Local]
->
AutoCrLf
),以防需要排除更多文件:

我使用了那个命令,但后来我注意到还有更多的文件要包含。然后,我试图一个接一个地添加它们,但收到一条消息说它无法覆盖备份文件

所以这一条似乎对我有用:

$ git filter-branch --tree-filter 'rm -rf fullpath_file1 fullpath_file2 ... fullpath_file_n' -f HEAD

git status
是否返回任何内容?否,不是“已删除”,只是已修改。