我正在我要删除的第二个文件上执行此命令(第一个是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..." to unstage) modified: gf5/console/basic.php Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) //(and a whole long list of files)
Oliver Willi.. 8
AHA!我弄清楚发生了什么.阅读最后几句,以获得一点见解.
答案是先做:
git status
这显示了RED中的修改过的文件,我认为这意味着它们在git的脑海中以某种方式被"删除".然后我做了:
git add --all
从那里我使用SourceTree提交了所有暂存的文件(抱歉,我没有一直使用命令行).我继续前进,同时将更改推送到服务器,但这是可选的.
上面的命令然后成功运行.
当我尝试在不同的文件上运行上述命令时,我遇到了同样的问题.所以我再次运行git status
,结果发现我刚刚从历史记录中删除的文件仍然存在,所以你需要这样做:
git rm /previous_file_you_just_removed_from_history.php
另外要说明的是,filter-branch命令将从所有提交中删除该文件的历史记录,但它不会删除您对该文件所做的更改.也就是说,删除文件仍然是您在此之前所做的所有更改的总和.我希望这有助于为其他人明确这个概念.
AHA!我弄清楚发生了什么.阅读最后几句,以获得一点见解.
答案是先做:
git status
这显示了RED中的修改过的文件,我认为这意味着它们在git的脑海中以某种方式被"删除".然后我做了:
git add --all
从那里我使用SourceTree提交了所有暂存的文件(抱歉,我没有一直使用命令行).我继续前进,同时将更改推送到服务器,但这是可选的.
上面的命令然后成功运行.
当我尝试在不同的文件上运行上述命令时,我遇到了同样的问题.所以我再次运行git status
,结果发现我刚刚从历史记录中删除的文件仍然存在,所以你需要这样做:
git rm /previous_file_you_just_removed_from_history.php
另外要说明的是,filter-branch命令将从所有提交中删除该文件的历史记录,但它不会删除您对该文件所做的更改.也就是说,删除文件仍然是您在此之前所做的所有更改的总和.我希望这有助于为其他人明确这个概念.