Git 从存储库中删除后,从所有以前的提交中删除virtualenv文件

Git 从存储库中删除后,从所有以前的提交中删除virtualenv文件,git,github,commit,Git,Github,Commit,当我开始处理我的一个Python项目时,我忘了将我的venv虚拟环境目录添加到我的.gitignore中。现在,我的GitHub存储库显示了该提交中的添加和删除,并没有让我很好地了解我何时进行了重大更改venv目录有100000多行代码 我已经创建了文件并运行了git rm-cached。然后是git添加、提交和推送 有没有办法从我的venv目录发生更改的所有以前的提交中删除添加和删除,以便GitHub不再在我的提交中计算这些添加/删除?我想保留提交中不包含venv的部分,并且只删除提交中的ve

当我开始处理我的一个Python项目时,我忘了将我的venv虚拟环境目录添加到我的.gitignore中。现在,我的GitHub存储库显示了该提交中的添加和删除,并没有让我很好地了解我何时进行了重大更改venv目录有100000多行代码

我已经创建了文件并运行了git rm-cached。然后是git添加、提交和推送

有没有办法从我的venv目录发生更改的所有以前的提交中删除添加和删除,以便GitHub不再在我的提交中计算这些添加/删除?我想保留提交中不包含venv的部分,并且只删除提交中的venv部分

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch venv"

请记住,这会重写分支的整个历史记录,因此您必须强制推送分支并通知所有用户,以便他们强制推送分支。

这会消除所有过去的提交吗?该命令会重写并不会消除分支中的所有提交。需要--全部结束以捕获每个引用。@JackMoody,历史是不变的,重写会创建新的历史并重新处理引用,因此所有旧的提交仍然存在,直到垃圾回收将其清除,并且filter branch在refs/original/下保留原始提交的副本,以摆脱那些git filter branch-f-setup exit,只需执行无操作清理。这正是我想要的。非常感谢。为什么用户需要强制执行pull而不是普通的pull?因为命令重写了历史记录,创建了新的提交,而不是当前的分支,并且用户必须替换而不是合并,而不是用新的分支重新设置旧分支的基础。