2011-12-07 65 views
2

考慮以下歷史修復了一個提交合並

R--A--B--C------F--H--D' 
\   /
    -------- D--E 

d」之前發生的事情是對犯d,我想在歷史上集成了修正,但git rebase -i並不讓我做。

我可以手動重新創建歷史記錄,重置爲E,fixup,重做合併和櫻桃選擇H,但它會提交日期並且很麻煩。

我該怎麼辦?

+0

對不起,但我不明白你的圖形。 D的父承諾在哪裏? E和F之間的連接是否合併? – guerda

+1

是的,F是C和E的合併提交。希望這個編輯更清晰 – CharlesB

回答

0

我必須再次這樣做,並嘗試--preserve-merges選項git rebase -i,它完美的作品。

不需要手動重做合併!

2

我覺得你最好的選擇可能是你說的話:復位,重新合併,摘櫻桃H.要保留舊提交日期,你應該能夠做這樣的事情:

git merge --no-commit my-branch 
git commit -C <sha of F> 
git cherry-pick <sha of H> 
+0

謝謝,'-C'背後的魔術是什麼?它從F的sha複製元信息,對吧? – CharlesB

+0

另外我不明白爲什麼'git rebase -i'不能幫助我處理這個用例。 – CharlesB

+1

是的,'-C'從​​指定的ref複製提交消息和作者信息(包括時間戳)。 – dahlbyk