清除历史记录:将A压缩到B和从D压缩到E在Git中提交

时间:2011-08-23 21:41:18

标签: git version-control git-rebase

我的回购中有一段丑陋的历史,我想简化它一点点。从我读过的,git rebase将是我应该使用的工具。我想做的是:

转过来:

A--------------------------I (master)
 \                        /
  B--C-------------G--H--/ (development)
      \           /
       D--E------/ (feature-1)
           \    /
            F--/ (feature-2)

进入这个:

A-BCDEFH--I (master)

在提交“我”之后,我还有其他提交方式相同,所以我希望我的最终历史看起来像:

A-BCDEFH--I--KLMNO-P (master)

有关如何完成此任务的任何指示?

编辑:请注意,在这个例子中,D和F不是合并提交 - 它们是标准提交,所以它们都不应该从历史中消失(尽管合并提交,G和我应该)。

1 个答案:

答案 0 :(得分:1)

你可以用这个完成第一步:

$ git checkout -b new-master master
$ git rebase --onto A A new-master

其中A是图表中A提交的提交标识符。

这将创建一个新的分支new-master,最终将以您想要的master形式结束(合并提交,不会引入自己的更改将从历史记录中删除)。要移植到其他分支,请逐个检查并发出git rebase --onto new-master master branchname

如果您对更改感到满意,可以更新master分支并删除new-master

$ git checkout master
$ git reset --hard new-master
$ git branch -d new-master