我为我的项目积累了很多git提交。作为清理repo的第一步,我想将每个提交分成两个提交:一个只触及特定文件/某个/目录/文件,另一个触及其他所有内容。
由于git历史很长,我想避免手动执行此操作。
我考虑过的一些方法(但实际上没有尝试过)是:
git rebase --exec
和执行拆分的脚本。filter-branch
。 (对这个工具不太熟悉)然而,因为在我看来这是一个相当普遍的问题,我想在尝试重新发明轮子之前我会先检查一下。有没有自动化的方法呢?
答案 0 :(得分:4)
你在路上,你所尝试的是这样做的方式。
如您所知,您有两个主要选择:
git rebase -i
又名:squash
(手动程序)// Manipulate any commit by editing it and commitign again
git rebase -i HEAD~X
由于git历史很长,我想避免手动执行此操作。
阅读本文解决您的问题 How to tear apart a repository: the Git way
git filter-branch
将在条件中指定的每个提交中运行,然后您可以使用它执行任何操作(通过脚本),而不是手动执行。
Here是关于filter-branch
// Remove any given file from commits
// Now you can commit it again into a new commit
git filter-branch --tree-filter 'rm -f <file name> HEAD