这是三个部分,这是一个比Make Git rebuild history using the current .gitignore更多的分步问题
.gitignore
规则,使其一直到顶部。我这样做的方式是git checkout KNOWN_COMMIT_WITH_PROPER_GITIGNORE .gitignore && git rebase --continue
--preserve-merges
https://stackoverflow.com/a/19757964/242042中,为历史记录中的每个提交应用删除的忽略文件。我认为这可以用类似于git-filter-branch
的方式完成关键是这需要基于可能随时间变化的.gitignore
,我希望将.gitignore
文件的特定版本应用于第一次提交并应用于历史的其余部分。
我想你可以把'git filter-branch'和'git ls-files'结合起来。像这样的东西:
git filter-branch --index-filter 'git rm --cached `git ls-files --exclude-standard -i`'
即,过滤分支并修改索引;对于每个提交列表,忽略索引中的文件并将其从索引中删除。
PS。但请在试验前进行备份。