2011-08-23 46 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

相關問題