2013-04-17 70 views
2

我的目標是使用git bisect。我被一個事實所困擾,顯然接近提交的問題,我試圖糾正,我介紹了另一個小錯誤,呈現一些鄰居提交無法測試。git:使用rebase -i重播(大部分)歷史記錄,保持分支和合並結構不變

第二個錯誤是一個微不足道的錯誤。我稍後更正了幾個提交。

我想做到這一點:

git checkout master 
git checkout -b fully-testable-branch 
git rebase -i initial-good-bisect-point 

,然後取出承諾,從提交的列表介紹了第二個錯誤。我希望並準備好處理代碼和歷史領域的一些衝突。然後,如果一切順利(並且它應該 - 這個項目中的大多數提交都是可測試的),我可以再次平分,這次在完全可測試分支的頂端和初始好分叉點之間,點,找到並研究問題提交,結帳主,然後從那裏開始。

如果歷史記錄是線性的,這將工作正常。 (我之前做過)。然而,git rebase -i做的是線性化非線性歷史。反過來,這又產生了很多已經解決的衝突(往往不是我,往往是我在其他機器上,所以我的rerere緩存沒有太大的幫助)。這些衝突是我的計劃的一部分,既不涉及我想要明確的錯誤,也不涉及我確定的未成年人。

我不是很激動要重新解決這些衝突。這項工作第一次非常乏味且容易出錯!

那麼,有沒有辦法讓git rebase -i重放歷史包括分支和合並?還有其他的命令嗎?我是否全都錯了,如果是這樣,我應該怎麼試試?

編輯:根據要求,這是歷史的簡化版本。

A-B-C-D-E--F-G-H-I-J-R-S-T 
    \   /
     \   /
     α-N-M---P--- 
     \ /
     β /
      \/
      γ      

有報道說,分別爲P解決的衝突,並在D處創建小錯誤該歷史被壓平成:

A-B'-C'-D'-E'-F'-α'-β'-γ'-N'-M'-P'-F'-G'-H'-I'-J'-Z' 

當如此重放歷史,有在N個衝突」, M'和P'。

+0

很多文字 - 但我仍然不確定我是否理解你的最終目標。也許你可以展示一些示例提交圖,說明你現在擁有什麼以及最後想要擁有什麼,在對分之後。 –

+0

你可以使用'git bisect skip'來忽略提交時提交的提交嗎? – loganfsmyth

+0

@loganfsmyth你可以,但如果你這樣做,你最終可能會得到一個不精確的答案:git bisect告訴我,破壞的提交是列表中的一個。 –

回答

1

要做你想要的詢問,我認爲你需要重新分配每個分支,然後重新進行合併。

在您的例子(略截斷簡潔),你最終的東西,如:

  β'----- 
     /  \ 
     α'-N'-...-P' 
     /   \ 
     E'-F'-... -J'-R'-S'-T' [fully-testable-branch] 
    /
A-B-C-D-E--F-G-H-I-J-R-S-T [master] 
    \   /
     \   /
     α-N-M---P--- 
     \ /
     β --- 

(即,你可以在J創建分支,然後重訂E..JC,然後重訂α..PE',然後合併P'到你的新分支創建R',然後將S..T重新分配到R'等等。


一個更簡單的方法可能只是藏匿您的D逆轉的地方(使用藏匿或只保存補丁文件),然後只將它應用於固定在每一個二分工作副本。

相關問題