0

我经常忘记添加node_modules或添加components.gitignore,它们最终在我的 git 提交中并推送到 github(上传需要很长时间)。无论如何要从每次提交中删除这些文件夹的所有实例并将它们保存在工作目录中?

4

3 回答 3

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 帮助页面。

从 Git 历史记录中删除敏感文件及其提交

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

于 2013-04-06T19:14:14.170 回答
2

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' -- --all

于 2013-04-06T22:07:50.463 回答
1

git -rm -r --cached像 jszobody 建议的那样使用,或者使用git reset HEAD更少的输入和建议的方式git status从提交中删除文件(在实际调用之前git commit)。这称为取消分期。

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

如果您已经将更改推送到 github,则必须git push -f在 rebase 或修改后运行。如果您在团队中工作,那么基于尚未推送的提交重新构建是一个坏主意,因为它会给您的提交提供与团队其他成员不同的哈希值。

于 2013-04-06T20:03:41.630 回答