2011-08-23 47 views
0

我在回购中有一个丑陋的历史记录,我想精简它 - 它有点。从我读过的,git rebase会是我应该使用的工具。我想要做的是:清算历史:压缩A到B和D到E在Git中提交

打开本:

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和我应该)。

+0

你故意从你的最后历史保留了G& –

+0

'G'是合并提交,所以当历史线性化时它没有真实的历史。 (对于这个问题,'I'也是这样......它也会在rebase中消失。) – cdhowie

+0

在这个例子中,我忽略了合并提交。所以D和F是“实际”提交。我对这种困惑表示歉意 - 编辑。 – AeroCross

回答

1

可以完成第一步与此:

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

哪里A是A提交标识符提交您的曲线图。

这将创建一个新的分支new-master,最终将以您想要的形状结尾(合并提交,引入它们自己的更改将从历史记录中删除)。要通过其他分支机构,请逐个检查并发出git rebase --onto new-master master branchname

当你满意的变化,您可以更新master分支,删除new-master

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

我相信你需要'new-master'作为你的第一个'rebase'命令的最后一个参数。 –

+0

是的,谢谢你指出。 – cdhowie

+0

@cdhowie在这个例子中,你说“git rebase - 去A ** A ** new-master” - 这是我想要改变的提交范围吗?或者只是“新主人”? – AeroCross

相关问题