[英]Unable to unstage git committed file
当我们向git添加一个目录时,我们有一些临时文件(以.~
结尾),我们不想跟踪已经错误添加的文件。
我们已经设置了一个带有*.~
规则的.gitignore
文件。 这适用于所有新的临时文件,但我们无法删除已经提交的少数文件。
当我们运行git rm --cached <file>
它将文件从modified:
移动到deleted:
status。 并说
# 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.~
你几乎就在那里:在第一步之后停下来并提交!
git status
给出的消息是如何撤消已经进行的更改,如果您错误地进行了更改。 你在运行git rm --cached <file>
做了正确的事 - 该命令从暂存区域中删除文件,同时将其保留在本地副本中。 如果文件的状态不正确,通过让您知道需要做什么,Git状态会有所帮助。 在这种情况下,文件具有正确的状态,因此您可以继续并提交。
问题是阶段不是你想象的那样
Git Book上面的图像清楚地显示了文件状态。
您已提交的临时文件实际上并未暂存,但会对其进行跟踪。 Git在提交删除时停止跟踪文件。 git status
表示要提交的更改正在删除文件。 git commmit -a -m "Removed temp files"
应该实际提交删除并使文件未跟踪。
但是,这不会从旧的提交中删除该文件,我希望将其链接到Github帮助:删除敏感数据 ,因为它非常清楚地解释了它。
git filter-branch --force --index-filter \\'git rm --cached --ignore-unmatch'\\ --proune-empty --tag-name-filter cat - --all
上面的命令也将完全从历史中清除旧文件,您可能不需要这些文件,但我将其作为额外信息包含在内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.