当我第一次进入VC时,我使用的是SVN并且不明白我在做什么。我在不同的主干上维护了一个项目的不同部分,但会一次对所有主干进行提交,从而导致具有相同提交消息的多个提交。大约两年前,我醒来并将所有的树干弄成一个树干,然后又醒了一些并将 repo 转换为 git。现在我有了一个快速、灵活的仓库,里面有几个分支,我再高兴不过了……
...除了所有那些旧的、重复的提交消息都在困扰我。(它们构成了我 repo 中提交的大约 1/3-1/2。)这正是git rebase
它的用途,对吧?我已经尝试对一批副本进行测试运行,并且它可以正常工作,只是它看起来像是将我的master
分支与我的所有其他分支分开。我这样做了,git rebase -i <sha>
并将所有重复的提交压缩到第一个。我想保持我的分支结构完整。
我想要压缩的所有重复消息都在我进行svn=>git
转换之前出现,并且我的所有分支都在转换之后开始。也就是说,svn=>git
转换前的整个历史是线性的,没有分支。
另一个警告——这是一个很大的警告——是这个 repo 已经被推送到一个远程 repo。我知道重写共享存储库的历史是个坏消息,但我只是在考虑它,因为还没有人从我的遥控器克隆或分叉。我想在将其用于克隆/分叉之前清理历史记录。
那么有没有办法在一定程度上重写历史,而其余部分保持不变呢?还有其他建议可以帮助我清理这个烂摊子吗?