git revert 后再次merge_git如何回滚错误合并的分支
導(dǎo)讀:
分類:技術(shù)干貨
題目:git如何回滾錯誤合并的分支
合并到線上分支出現(xiàn)問題的修復(fù)方式。
場景
線上分支:master
你開發(fā)的分支:dev1
同時開發(fā)的分支:dev2
dev1分支開發(fā)的代碼已經(jīng)上線,并且已經(jīng)merge到master
同時dev2分支也已上線,并且已經(jīng)merge到master
這時發(fā)現(xiàn)dev1的巨大bug,線上版本要把這個分支的代碼全部移除。
想要達(dá)到的效果
我們要撤銷所有dev1的合并,并且保留dev2的代碼。
同時本地dev1的分支不想刪除這些代碼,還有在這基礎(chǔ)上開發(fā)。
master分支
如果使用reset,那么線上的幾個提交記錄都不會保留,達(dá)不到我們想要的效果。
這里使用git revert。
首先我們要撤銷所有dev1的更改,找到dev1的兩次commit id
git revert 63db9b1228c9e38a015513f834a42fa55002fca8
git revert a407174c5df3e47e1866663e4c3fe611419eb5a8
此時master已經(jīng)達(dá)到我們想要的效果:
開發(fā)分支
這時回到我們的dev1分支,修復(fù)bug,我還要保留以前提交的代碼。
但是在上線前總要先merge master,但是master的兩次revert是領(lǐng)先你的,一旦merge后你的代碼就沒有了。
下面是當(dāng)前dev1的提交情況
所以我們要在merge master后,再使用revert撤銷這次merge。
但是這時你發(fā)現(xiàn),在merge完master之后你又在這個分支提交了新代碼,這時revert就會報錯:
git revert ce479b597de6025da4a67ddd4a94d1b8034d8c67
error: commit ce479b597de6025da4a67ddd4a94d1b8034d8c67 is a merge but no -m option was given.
fatal: revert failed
這是因為撤銷的是一次合并,git不知道要保存這兩個分支中哪個的修改。
-m 1 表示保留當(dāng)前分支的更改
-m 2 表示保留master更改
我們目的是為了保留dev1的代碼,所以要保留當(dāng)前代碼,即使用 -m 1
git revert -m 1
ce479b597de6025da4a67ddd4a94d1b8034d8c67
[dev1 bb363fa] Revert "Merge branch 'master' into dev1"
2 files changed, 0 insertions(+), 0 deletions(-)
rename dev2 add => b (100%)
create mode 100644 c
執(zhí)行完上面的代碼,我們就會發(fā)現(xiàn),代碼又回來了,和master沒有回滾前的代碼一樣。
修完bug,再把當(dāng)前代碼合并到master,然后你就會發(fā)現(xiàn),dev2提交的代碼被你的merge干掉了???
這是因為你的那次rever合并采用了你的分支代碼,但是你的dev1分支并沒有dev2的代碼...
所以我們應(yīng)該在master回滾前,回到dev1分支,先merge一次最新代碼,再執(zhí)行后面的操作。
總結(jié)
總結(jié)起來流程很簡單。
1.保持你要開發(fā)的分支同步了master最新代碼。
2.revert所有該分支的提交。
3.回到你的分支merge master。
4.revert merge master的那次提交。
總結(jié)
以上是生活随笔為你收集整理的git revert 后再次merge_git如何回滚错误合并的分支的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刮刮乐中奖技巧
- 下一篇: 如何区分netty是udp还是tcp_鲜