Git不会删除文件,并且始终认为工作目录是脏的

时间:2012-08-01 00:28:39

标签: git

我试图在Heroku上放置一个新的Rails应用程序,并删除了默认索引文件public / index.html。然而,令我惊讶的是,当我在Heroku上访问我的应用程序时,我看到了默认索引页面,而不是我想看到的索引。

好的,这有点奇怪,但我想可能有一些原因,比如Git没有从存储库中删除文件,即使我删除了它。所以我在互联网上查看如何强制Git从存储库中删除文件并提出

git filter-branch --tree-filter 'rm public/index.html' HEAD

然而,当我运行它时,它说“不能用脏工作目录重写分支”。我不确定为什么我的工作目录很脏,因为我刚刚提交,当我运行时git status它说

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    public/index.html

这让我感到困惑,因为我不久前删除了public / index.html。为什么它应该是唯一的变化呢?不过,我还是跑了git add .git commit -m "..."并说了

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    public/index.html
#
no changes added to commit (use "git add" and/or "git commit -a")

然后,我感到恼火,尝试了git add .git status,并发现变化根本没有被添加。 git add public/index.htmlgit rm public/index.html也没有对我做任何事情。然后我搜索了问题,并提出了一个StackOverflow帖子,其中有人建议尝试git stashgit stash apply刷新。我这样做了,事情仍然没有奏效。

问题是什么,我该如何解决?

2 个答案:

答案 0 :(得分:3)

我认为你必须基本上提交删除,所以做一个git commit -a -m'[comment]'然后它会接受你的删除

答案 1 :(得分:0)

关于git filter-branch,它会从repo中的所有提交中删除该文件,如果这是你想要的。在进行更改之前,只需进行提交或存储更改即可。如果您只是想从现在开始删除它而不是seansmash的答案可能就是您所需要的。