假定以下git
分支:A - >乙 - 「ç - > d - >電子 - >的F - 」G能否合成在GIT中的分支即跳過單個變化設定
我已經通過確定git bisect
提交C引入了一個錯誤,但是恢復由分支頂部的C引入的更改並不能解決問題。這表明在該分支的後續提交中還存在其他錯誤。
是否有合成以下分支的方法:A→B→D1→E1→F1→G1,其中1表示提交C中引入的更改不存在?然後,我會在該分支上運行git bisect
以確定找到其他錯誤。 [希望這不會需要重複多次]
假定以下git
分支:A - >乙 - 「ç - > d - >電子 - >的F - 」G能否合成在GIT中的分支即跳過單個變化設定
我已經通過確定git bisect
提交C引入了一個錯誤,但是恢復由分支頂部的C引入的更改並不能解決問題。這表明在該分支的後續提交中還存在其他錯誤。
是否有合成以下分支的方法:A→B→D1→E1→F1→G1,其中1表示提交C中引入的更改不存在?然後,我會在該分支上運行git bisect
以確定找到其他錯誤。 [希望這不會需要重複多次]
是:
git checkout -b newbranch <specifier-for-B>
git cherry-pick <specifier-for-C>..<specifier-for-G>
這些<specifier>
可以均爲原始哈希ID或分支機構名稱或分支名稱與~number
來算回來number
第一 - 提交,等等。訣竅是創建一個新的分支,以最後的好提交爲結束,然後挑選剩餘的可能不錯的提交,不包括已知錯誤提交。
一旦你有了這個新的分支,你可以使用git rebase -i
或git rebase --onto <target> <exclude>
刪除更多的提交,如果你喜歡。
您可以交互重新綁定並移除該提交。
首先創建測試分支:
git checkout -b test
接下來,開始底墊:
git rebase -i C^ # the parent of C
當你在交互式屏幕變基,刪除包含提交C
行。
這將使save
分支有效匹配A -> B -> D1 -> E1 -> F1 -> G1
,您可以繼續測試。
如果發現C
是唯一承諾您需要刪除,另一種選擇是恢復,所以你並不需要推動這一改變已經被推送的提交任何歷史:
git checkout master # get back to where you started
git revert C # will create a revertion commit
git push # will only push 1 new commit, the inverse of C
注,順便說一句,[Jonathan.Brink的方法](https://stackoverflow.com/a/45600474/1256452)基本上是相同的,除了他開始與新分支在舊分支相同的技巧,然後讓你刪除提交。如果你不得不重複刪除這可能會感覺更方便。儘管如此,它確實需要一個互動的重建步驟(或花哨的'rebase - ath'步法)。 – torek