如何从git仓库中删除重复的历史记录?

时间:2013-02-21 19:28:30

标签: git version-control

我尝试使用我在相关帖子中看到的git filter-branch命令来重命名一批旧提交。结果是,现在我的repo有许多与不同作者相同的提交。它给我留下了以下情况:

A' -> B' -> C'
               \
A  -> B  -> C -> D -> E -> F

A'A相同,但提交作者除外,B'C'相同。我想删除A'B'C'的所有引用和历史记录。注意:这些提交都不在分支上或有标记。

如何删除重复的提交历史记录?这是我之后的结果:

A  -> B  -> C -> D -> E -> F

我的理由是简单地清理历史。我是唯一接触过此代码的人,我知道尝试任何类型的非平凡回购都不是一件好事。此外,似乎有许多类似的问题,但我似乎无法拼凑出一个有效的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

编辑:嗯,这几乎奏效了。我从中看到的唯一问题是它覆盖了最近提交的提交时间(D +)。


我似乎找到了解决方案。我整天都在四处跳舞,但终于想出了正确的提交参考。按照上面的例子,我用最新的master分支克隆了一个新的repo。从那里我发现了C提交'哈希,它表示最后知道的好状态。然后我以交互模式运行rebase:

git rebase -i <the C commits' hash>

在出现的编辑器中,只显示了我想要删除的重复提交(直到当前历史记录)。所以我删除了所有旧的重复条目,直到D提交。保存rebase命令完成后没有错误。

此时我的本地存储库似乎已按顺序排列,所以我将其强制进入服务器:

git push --force origin master

最终结果似乎正是我所寻找的:

A  -> B  -> C -> D -> E -> F

不确定这是不是最好的方式,但是这不是你想做的事情。