我已经执行了git filter-branch --index-filter 'git rm --cached --ignore-unmatched badfiles/ badfiles2/' --prune-empty
(per here)来删除一堆文件,以准备将剩余的文件移动到另一个存储库。--prune-empty
摆脱任何产生的空提交,但它不会对合并起作用,这是有道理的。
现在这个特定 repo 的历史看起来很丑陋,有一堆实际上没有添加任何东西的合并,还有一些只是合并了其他没有实际添加任何更改的合并(在重写的历史中;他们可能已经在过滤器分支之前“有用”)。
考虑这个带注释的片段(用 生成git log --graph --oneline --shortstat
):
* 575e3b5 Merge pull request #68 from chris/feature # KEEP THIS MERGE!
|\
| * 5dbc3f1 Actual feature changes
| | 2 files changed, 2 insertions(+), 2 deletions(-)
| * 35abc98 Cleanup/prep
|/
| 2 files changed, 22 insertions(+), 16 deletions(-)
* c3b3d86 Merge pull request #46 from org/topic_branch-mods # USELESS-C
|\
* \ 892de05 Merge pull request #47 from org/topic_branch # USELESS-B
|\ \
| |/
|/|
| * e738d4b Merge branch 'master' into topic_branch # USELESS-A
| |\
| |/
|/|
* | 4182dac CommitMsg #40 #SQUASHED-PR
| | 2 files changed, 15 insertions(+), 6 deletions(-)
* | 3b42762 CommitMsg
|/
| 2 files changed, 29 insertions(+), 14 deletions(-)
* c4e62ba CommitMsg
| 2 files changed, 39 insertions(+), 16 deletions(-)
* c2bb13f CommitMsg
4 files changed, 241 insertions(+)
我想将其缩短为(显然使用不同的 id):
* 575e3b5 Merge pull request #68 from chris/feature # KEEP THIS MERGE!
|\
| * 5dbc3f1 Actual feature changes
| | 2 files changed, 2 insertions(+), 2 deletions(-)
| * 35abc98 Cleanup/prep
|/
| 2 files changed, 22 insertions(+), 16 deletions(-)
* 4182dac CommitMsg #40 #SQUASHED-PR
| 2 files changed, 15 insertions(+), 6 deletions(-)
* 3b42762 CommitMsg
| 2 files changed, 29 insertions(+), 14 deletions(-)
* c4e62ba CommitMsg
| 2 files changed, 39 insertions(+), 16 deletions(-)
* c2bb13f CommitMsg
4 files changed, 241 insertions(+)
所以我想摆脱“无用”合并,它们都是“空”合并(没有合并更改),但我想保留与同样“空”的KEEP 合并相关的历史记录/分组顶部,将这些提交组合成一个“变更集”。
或者看看传统的简化横向历史中的另一个例子:
A -- B -- C -- D ==> A -- B --- D'
\----\--/ / \-E-/
\----E
我已经尝试了删除“空”合并的解决方案(像这样),但是那些删除了所有空合并,我想保留示例中显示的“有用”空合并...
据我所知,“无用”的空合并不包含任何并非一直到历史左侧/顶部的提交。有没有办法干净地过滤掉那些?我想我什至不知道如何描述/定义那些......
请注意,给定的示例是故意简单的。对于它的价值,在历史的后期,这个回购看起来像这样,所有这些我都想修剪:
* 3d37e42 Merge pull request #239 from jim/topic-dev
|\
| * 05eaf9e Merge pull request #7 from org/master
| |\
| |/
|/|
* | 1576482 Merge pull request #193 from john/master
|\ \
| * \ 187100e Merge branch 'master' of github.com:org/repo into master
| |\ \
| * \ \ 067cc55 Merge branch 'master' of github.com:org/repo into master
| |\ \ \
| * \ \ \ a69e3d2 Merge branch 'master' of github.com:org/repo into master
| |\ \ \ \
| | |/ / /
* | | | | 0ce6813 Merge pull request #212 from jim/feature
|\ \ \ \ \
| | |_|_|/
| |/| | |
| * | | | 0f5352e Merge pull request #5 from org/master
| |\ \ \ \
| |/ / / /