在原产地上压制数百个旧提交

时间:2017-02-08 23:56:32

标签: git squash git-squash

我犯了一个愚蠢的错误,我不确定解决问题的最佳方法。这是我做的:

  • 基于样板创建了一个Web项目。
  • 删除.git以在进行初始提交之前删除所有历史记录(约500次提交)
  • 几个月后我自己的项目提交了大约200个,我将上游样板分支合并到我项目的本地分支中。这增加了大约500个来自上游样板的提交。
  • 在本地分支机构另外提交10个左右的提交,让我的项目再次使用样板文件中的更新
  • 将工作的本地分支合并到我的开发分支
  • 将开发分支推向原点
  • 在本地开发分支上创建了一个提交(未推送到原点)
  • 在另一个尚未合并开发的本地分支上创建了大约十二个提交(未推送到原点)

我的git历史现在拥有我最初删除的第一个项目提交之前的所有样板历史记录。它还在我的提交过程中散布了数百个提交。

我想做的是将合并中的所有内容从上游压缩到我用于单个提交的本地分支中。有没有一种无痛的方法呢?

另外,我还需要在原点上重写历史记录。这是一个私人回购,只有几个人正在使用它。我该怎么做?

1 个答案:

答案 0 :(得分:2)

  

我想做的是将合并中的所有内容从上游压缩到我用于单个提交的本地分支中。有没有一种无痛的方法呢?

使用您的仓库的两个本地克隆:

  • 在一个中,你检查你要压缩的各种状态(比如你的上游合并提交SHA1)
  • 在另一个中,你做了一个git reset - hard到第一个仍然正确的提交(即历史是好的)

然后,从第二个开始,你可以git --work-tree=/path/to/first/clone add .从第一个开始,然后提交。

重复你想要压缩到一个提交的第一个repo的各种状态(通过添加第一个repo的工作树并提交在第二个repo中实现)。

然后git push --force