1. 程式人生 > >不小心merge後的回滾操作

不小心merge後的回滾操作

revert pre 合並 ima ash span font current 內容

雖然有四個方法,但我們項目中使用方法一和二比較合適,不會產生新的commit,並且簡單粗暴

方法一,新分支覆蓋


①首先兩步保證當前工作區是幹凈的,並且和遠程分支代碼一致
方法一,刪除遠程分支再提交

$ git co currentBranch
$ git pull origin currentBranch
$ git co ./

②備份當前分支(如有必要)

$ git branch currentBranchBackUp

③恢復到指定的commit hash

$ git reset --hard resetVersionHash //將當前branch的HEAD指針指向commit hash

技術分享圖片

④刪除當前分支的遠程分支

$ git push origin :currentBranch 
$ //或者這麽寫git push origin --delete currentBranch

⑤把當前分支提交到遠程

$ git push origin currentBranch

方法二,強制push遠程分支

①首先兩步保證當前工作區是幹凈的,並且和遠程分支代碼一致

②備份當前分支(如有必要)

③恢復到指定的commit hash

$ git reset --hard resetVersionHash

④把當前分支強制提交到遠程

$ git push -f origin currentBranch

方法三,從回滾位置生成新的commit hash

①首先兩步保證當前工作區是幹凈的,並且和遠程分支代碼一致

②備份當前分支(如有必要)

③使用git revert恢復到指定的commit hash,當前分支恢復到a>3版本(見下圖)

a)此方法會產生一條多余的commit hash&log,其實1c0ce98和01592eb內容上是一致的

b)git revert是以要回滾的commit hash(1c0ce98)為基礎,新生成一個commit hash(01592eb)

$ git revert resetVersionHash

技術分享圖片

④提交遠程分支

$ git push origin currentBranch

方法四,從回滾位置生成新的分支merge

①首先兩步保證當前工作區是幹凈的,並且和遠程分支代碼一致

②備份當前分支(如有必要)

③把當前工作區的HEAD指針指向回滾的commit hash(註意不是branch的HEAD指針)

Notice:這個時候工作區HEAD沒有指向分支,稱為匿名分支detached HEAD

這個時候提交commit後無法保存狀態,git中的任何提交必須是在當前工作區HEAD所在分支的HEAD上進行push hash入棧,所以HEAD必須是屬於某個分支的HEAD位置,提交才生效。

$ git co resetVersionHash

技術分享圖片

④以該commit hash創建一個新的分支

$ git co -b newRevertedHash

⑤切換到當前分支,合並newRevertedHash。

$ git co currentBranch
$ git merge newRevertedHash

⑥進行代碼diff,完成代碼回滾,push到遠程currentBranch

Notice: 也可以直接hotfix,從要回滾的地方直接重新打包一個新tag包,發版本hotFixVersion即可。

文章來源:git如何正確回滾代碼

不小心merge後的回滾操作