在公共存储库中删除rebase和cherrypick之后的重复提交

时间:2017-04-04 17:55:23

标签: git github rebase

我有一个开源项目的github存储库 - this。由于各种原因,rebase和cherry-picking以不太谨慎的方式应用于存储库。由于承诺的信息不是公开的,因此也编辑了历史。跨越多个提交的某些操作似乎独立地应用于两个克隆,然后将两个克隆合并为一个克隆,从而导致更多重复。

简而言之:严重缺乏适当的git卫生,现在的历史非常混乱和多余。见下面的图片。

我想从存储库中删除整个重复的分支。

问题:

  • 解决清理大量重复提交(实际上是重复分支)的问题的最佳方法是什么?
  • Cubes git rebase -i
  • 的替代方案是什么?
  • 如果交互式rebase是要走的路,那么对面向公众的存储库做这件事会有多大的破坏性?我知道有建议不这样做。

情况的一些可视化:

interactive rebase

Example of duplicate commits

1 个答案:

答案 0 :(得分:0)

使用“git replace”替换提交的一种方法是让历史看起来更好而不重写它。所以你运行:

git replace --edit {commit}

用于将“复制”分支合并到编辑器窗口的提交,并删除除第一个之外的所有“父”行。然后你不会在git客户端看到分支,尽管它仍然存在。您可以使用命令推送和获取替换,以使整个团队可以看到它们:

git push origin 'refs/replace/*:refs/replace/*'
git fetch origin 'refs/replace/*:refs/replace/*'