当我们向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.~
答案 0 :(得分:2)
你快到了:在第一步之后停下来并提交!
git status
提供的消息是如何撤消您已经做出的更改,如果您错误地进行了更改。您在运行git rm --cached <file>
时做了正确的事情 - 该命令会从暂存区域中删除该文件,同时将其保留在本地副本中。如果文件的状态不正确,通过让您知道需要做什么,Git状态会有所帮助。在这种情况下,文件具有正确的状态,因此您可以继续提交。
答案 1 :(得分:1)
问题在于舞台不是你想象的那样
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
上面的命令也会完全从历史中清除旧文件,你可能不需要这些文件,但我将其作为额外信息包含在内。