Git:如何在之前的提交中从存储库中删除文件

4

我在Github上。我设置了一个.gitignore文件,其中指定了不添加到未来提交的文件,因为我试图减轻克隆的负担。现在,我需要从所有以前的提交中删除所有这些.class文件,仅共享必要的源代码,否则无论我如何努力,它总是会重量增加50mb左右。我看了一下http://cheat.errtheblog.com/s/git,我认为我可能需要这些命令的组合,但我真的不想搞砸我的工作。谢谢。

2个回答

11

git-filter-branch文档中有一个示例与您的用例相匹配。

git clone project project.tmp
cd project.tmp
git filter-branch --prune-empty --index-filter 'git rm --cached --ignore-unmatch *.class' HEAD 
cd ..
git clone project.tmp project.clean
rm -rf project.tmp
cd project.clean

project.clean 应该已经准备好被上传到上游了。

另外,如果您对此操作的结果感到紧张,可以在克隆和 GitHub 测试分支上进行实验,这永远不会有害。


0

在尝试之前,切换到测试分支当然是一个好主意:

git branch testing; git checkout testing

我所做的就是在提交的文件树中找到所有的类文件,然后从 git 中删除它们:

  1. git ls-files |grep *.class
  2. for file in git ls-files |grep *.class; do echo $file; done; 这只是检查我的 for 循环是否有我想要的所有文件,然后再进行 rm 操作
  3. for file in git ls-files |grep *.class; do git rm --cached $file; done;

然后将其提交到您的 git 存储库,并将其放入 .gitignore 文件中:

syntax: regexp
*.class

完成后,您可以选择将其合并到主分支并推送,或者在主分支上重复相同的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接