如何从所有git提交中删除文件夹,但将其保留在工作目录中

时间:2013-04-06 18:16:26

标签: git

我经常忘记将node_modulescomponents添加到.gitignore,它们会在我的git提交中结束并推送到github(需要永久上传)。无论如何要从每次提交中删除这些文件夹的所有实例并将它们保存在工作目录中吗?

3 个答案:

答案 0 :(得分:2)

从当前版本中删除的简单方法:

使用git -rm -r --cached

--cached选项将文件或目录保存在本地工作目录中,并从git中删除它。

来自git help rm

--cached
     Use this option to unstage and remove paths only from the index. 
     Working tree files, whether modified or not, will be left alone.

请参阅https://www.kernel.org/pub/software/scm/git/docs/git-rm.html

从所有修订版中删除:

如果您确实需要从所有版本中删除文件/目录,请查看此主题和专用于此的git帮助页面。

Remove sensitive files and their commits from Git history

https://help.github.com/articles/remove-sensitive-data

答案 1 :(得分:2)

答案 2 :(得分:1)

使用像{jszobody建议的git -rm -r --cached,或者git reset HEAD这样做更少一点,以及git status建议的方式从提交中删除文件(在实际调用之前{{1} }})。这叫做unstaging。

但是,在git commit之后,没有简单的方法可以删除这些文件夹。如果上次提交引入了您不想保留的更改,请将本地副本修改为您希望的状态,运行git commit并执行git add .。如果在进一步提交或多次提交的提交中引入了不需要的更改,则必须通过git commit --amend进行重新绑定。我建议你阅读有关它的手册页或寻找一些教程。

如果您已将更改推送到github,则必须在改变后运行git rebase -i或修改后。如果你是在团队中工作,那么在推送提交的基础上进行重新定位是一个坏主意,因为它会为你的提交提供与团队其他成员不同的哈希值。