git说我有未分阶段的更改,但我没有显示它们

时间:2017-01-09 18:15:04

标签: 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 unstaged changes.

那么我如何知道git在没有列出的时候引用的“未分级”文件,以及如何解决这个问题呢?

PS问题不是藏匿,我没有任何东西,也没有对这个回购进行任何隐藏。

注意:我做了git status并收到了这个:

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)

3 个答案:

答案 0 :(得分:8)

AHA !!我弄清楚发生了什么。阅读最后几句,以获得一点见解。

答案是先做:

git status

这显示了RED中的修改过的文件,我认为这意味着它们会以某种方式被删除&#34;在git的脑海里。然后我做了:

git add --all

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

上述命令随后成功运作。

当我尝试在不同的文件上运行上述命令时,我遇到了同样的问题。所以我再次运行git status,结果发现我刚从历史记录中删除的文件仍然是那里,所以你需要这样做:

git rm /previous_file_you_just_removed_from_history.php

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

答案 1 :(得分:0)

我遇到了同样的问题,我的所有文件都在新的克隆之后显示为修改后发现原因(在我的情况下)Tortoise Git在结帐和提交时自动修改每个文件的行结尾。

要防止出现此问题,请按照{{3}中的说明禁用存储库设置窗口(AutoCrLf - &gt; Git - &gt; Config Source [Local])下的AutoCrlf设置}}

答案 2 :(得分:0)

如果需要排除更多文件:

我使用了该命令,但随后我发现要包含更多文件。然后,我尝试一个接一个地添加它们,但收到一条消息,说它不能覆盖备份文件。

所以这个似乎对我有用:

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