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

问题描述:

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

+0

还没有尝试过,但我必须做到多个回购,当我做我会接受。 – ThomasReggi 2013-04-10 15:11:35

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

使用git -rm -r --cached

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

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

+0

这不会删除所有修订中的文件夹。 – jszakmeister 2013-04-06 23:34:47

+0

@jszakmeister好点,我已经更新了我的答案 – jszobody 2013-04-06 23:39:37

二者必选其一git -rm -r --cached像jszobody建议,或做git reset HEAD这是一个有点少打字和git status建议从删除文件的方式提交(前实际调用git commit)。这就是所谓的暂停。

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

如果您已将更改推送至github,则必须在您的rebase或修改后运行git push -f。如果你在团队中工作,重新推迟提交的提交是一个坏主意,因为它会给你的提交不同于你的团队其他成员的提交。