我正在我要移除的第二个文件上执行此命令(第一个是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)
答案 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