Bja*_*sen 39 git git-filter-branch
我已经清理了我们的Git存储库,我们需要从历史中删除大部分内容.我这样做使用:
git filter-branch --prune-empty --tree-filter 'rm -rf some_stuff'
Run Code Online (Sandbox Code Playgroud)
--prune-empty除了提交多个父项(合并提交)之外,该标志将删除在该过程之后保留为空的提交.即使合并的分支完全没有包含任何内容,合并也不会向树添加任何内容.
我如何从历史中修剪这些空的合并提交?
rap*_*sse 38
这优于rebase解决方案,因为它保留了原始历史记录的提交者信息,提交者日期和非空合并.
git filter-branch --prune-empty --parent-filter \
'sed "s/-p //g" | xargs -r git show-branch --independent | sed "s/\</-p /g"'
Run Code Online (Sandbox Code Playgroud)
这受到内核邮件列表中与Lucas解决方案相同的线程的启发.然而,它不需要Ruby并且是单行的.它确实需要的GNU版本xargs和sed虽然.
sso*_*low 11
我需要filter-branch在ssokolow/profile的副本上运行后将ssokolow/lap分开.
这做了一个不错的工作,作为一个自动"崩溃任何遗留的东西--prune-empty"命令:
git rebase --root HEAD
Run Code Online (Sandbox Code Playgroud)
(我需要--root它,所以它会用仍然有内容的最旧的提交替换现在空的初始提交.)
ral*_*nja -2
我在这里发现了一个围绕过滤器分支的非常可爱的小包装脚本:
https://github.com/pflanze/chj-bin/blob/master/cj-git-filter-branch
这里的先决条件和背景:
http://lists.q42.co.uk/pipermail/git-announce/2011-September/000486.html