2017-02-23 151 views
1

我試圖修復我的git分支,這是我所做的。Git合併主無需恢復提交

我有一些代碼應該在分支中開發;然而,我承諾並推動主人(承諾A)。

然後,我繼續並恢復了該提交,並將恢復推回給主(提交B恢復A)。

然後,我創建了一個關於提交A的分支並繼續我的開發(提交C和D)。所以這就是我目前的樹看起來像:

* D (HEAD -> branch_a, origin/branch_a) removed testing code 
* C updated 
| * B (origin/master, origin/HEAD, master) Revert "new code" 
|/ 
* A new code 

我希望能夠乾淨地合併此分支回到主。通常,我會做的是git pull origin master到我的分支,但我不能這樣做,在這種情況下,因爲master具有A的復歸

我能在branch_a做,以確保它能夠合併到master沒有失去我的工作?

+0

是不是正確的,你只是想了解'B'忘記,並希望你的歷史看起來像'A - >ç - > d '? – mkrieger1

+0

@ mkrieger1一旦我合併回主人,是的,我基本上想忘記'B'。最初的問題是'A'從來就不應該成爲主人,唯一的原因'B'是必要的,所以'A'在我準備好之前並不在主人身上。 – FGreg

回答

0

輸入問題後,我發現一個similar question碰巧有一個命令,它實現了我正在尋找的結果。

由於只向承諾master提交B,這是在分支上不需要的提交,因此可以使用在發生衝突時保留分支中的更改的策略合併masterbranch_a

branch_a運行git merge -s ours master將使用在發生衝突時branch_a版本合併masterbranch_a

這種操作的結果改變了樹的樣子:

E (HEAD -> branch_a, origin/branch_a) Merge branch 'master' into branch_a 
|\ 
| * B (origin/master, origin/HEAD, master) Revert "new code" 
* | D removed testing code 
* | C updated 
|/ 
* A new code