2

我尝试使用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

我这样做的原因是简单地清理历史。我是唯一接触此代码的人,而且我知道尝试任何非平凡的回购都不是一件好事。此外,似乎有很多类似的问题,但我似乎无法拼凑出一个可行的解决方案。

谢谢!

4

1 回答 1

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

不确定这是否是最好的方法,但话说回来,这并不是你真正想做的事情。

于 2013-02-21T20:42:38.647 回答