從history1分出來的A, B兩個branch
A上有一些更改,例如
changeA2
changeA1
history1
B上有一些更改,例如
changeB2
changeB1
history1
---------------------
此時想把B branch上的改動merge到A branch,於是在A branch上執行 git merge B, 執行完畢后A branch的commit記錄可能如下:
merge branch 'B' into A
changeA2
changeB2
changeB1
changeA1
history1
此時突然發現情況不對,想把剛才A上剛才的merge取消,遂在A上執行 git revert -m 1 <merge commit的SHA1碼>,此時commit記錄變成如下狀態:
revert “merge branch 'B' into A”
merge branch 'B' into A
changeA2
changeB2
changeB1
changeA1
history1
注意,這時候如果你想再把B branch上的change merge回A上已經不可能了,當執行revert “merge branch 'B' into A”的時候你告訴git不要merge B上的東西(任何基於B的branch都不能merge了),解決方法有兩種:
1. 把revert “merge branch 'B' into A”這個commit再revert回去,這一般不太可行,好不容易revert過來的又revert回去么?遂方法2
2. B上的change有些有用,又不想都放棄掉,此時在B上執行git reset <history1的SHA1碼>, 也就是把B的頭指針指到剛分出來時候的那個commit點,這時候改動還在,只不過都變成unstage狀態,這時速度把不對的地方改過來,重新commit一下,此時B的commit記錄變為:
NewChangeB
history1
此時再在A上merge B上的更改就可以了