第一次在这里使用git。我不小心使用了" git init"没有.gitignore文件所以我在提交中有一堆gradle /和build / files。我正在使用" git ls-tree -r master"显示索引中的所有文件。而不是检查每一个先前的提交并使用" git rm --cached"删除所有不必要的构建和gradle文件,如何通过所有以前的提交删除它的所有出现?
编辑:有没有办法删除所有提交中的每个目录和文件,只保留src目录?
答案 0 :(得分:1)
您可能确实需要filter-branch
命令而不是rebase
。无论哪种方式,有几个项目需要注意:
这就是rebase和filter-branch所做的事情:它们复制提交,并在提交副本之前允许一些更改。然后,在提交了(略有不同的)副本后,他们将引用 - 分支和标记名称 - 移动到副本。
考虑到这一点,还有几个要考虑的事项:
--tag-filter
时才会这样做。 (如果你没有标签,显然这并不重要。)而且,当过滤器分支副本签名带注释的标签时,它会丢弃它们的签名:它们变为无符号。否则,它将不得不纠缠你手动重新签名所有,而filter-branch旨在完全自动化。现在您已准备好the linked question及其过滤分支答案。不过,有关使用--tag-name-filter
和部分加速选项的说明,请参阅this other answer相关问题。
请注意git rm -f --cached --ignore-unmatch
适用于目录(或“文件夹”)名称以及纯文件名。可以使用--tree-filter
(在第二个链接页面上的其他答案中提到)代替--index-filter
,它对于复杂操作更方便,但它很多更慢(确切的减速因操作系统,回购协议的大小,SSD与旋转媒体存储等等而有所不同,但“使用--index-filter
比使用void someMethod(T object)
要好”起约为100倍“。