无法取消git提交的文件

时间:2014-02-25 17:35:34

标签: git gitignore

当我们向git添加一个目录时,我们有一些临时文件(以.~结尾),我们不想错误地追踪它们。

我们已经设置了.gitignore*.~规则的文件。这适用于所有新的临时文件,但我们无法删除已经提交的少数文件。

当我们运行git rm --cached <file>时,它会将文件从modified:移至deleted:状态。并说

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    FILE.~

但是当我们运行git reset HEAD FILE.~时,它仍然在

下的文件列表中
Unstaged changes after reset:
M       pd/FILE.~

2 个答案:

答案 0 :(得分:2)

你快到了:在第一步之后停下来并提交!

git status提供的消息是如何撤消您已经做出的更改,如果您错误地进行了更改。您在运行git rm --cached <file>时做了正确的事情 - 该命令会从暂存区域中删除该文件,同时将其保留在本地副本中。如果文件的状态不正确,通过让您知道需要做什么,Git状态会有所帮助。在这种情况下,文件具有正确的状态,因此您可以继续提交。

答案 1 :(得分:1)

问题在于舞台不是你想象的那样 File Lifecycle

Git Book上方的图片清楚地显示了文件状态。

您已提交的临时文件实际上并未暂存,但会对其进行跟踪。 Git在提交删除时停止跟踪文件。 git status表示要提交的更改是删除文件。 git commmit -a -m "Removed temp files"实际上应该提交删除并使文件未跟踪。

但是,这不会从旧版提交中删除该文件,我希望将其链接到Github Help: Remove Sensitive Data,因为它非常清楚地解释了这一点。

  

git filter-branch --force --index-filter \'git rm --cached   --ignore-unmatch'\ --proune-empty --tag-name-filter cat - --all

上面的命令也会完全从历史中清除旧文件,你可能不需要这些文件,但我将其作为额外信息包含在内。