git把測試分支誤合並到開發分支后的回滾操作


場景:正常開發流程,我們會從master分支上拉一個新分支作為開發分支進行開發,但是在開發過程中有伙伴把測試分支合並到了開發分支,最后如果把開發分支合並回master分支的話,master分支會多了測試分支的代碼,這些代碼可能在其他開發模塊還沒上線,可能會導致生產環境出現異常,那么,如何從開發分支撤銷掉從測試分支合並過來的代碼呢?

分支如下圖

 

 

 

 

思路:如上圖,先在dev4上撤銷commit回滾到dev3上,然后把回滾的代碼放到貯存區,再撤銷dev3這個commit,並且不要dev3的代碼(因為dev3的代碼是從test分支合並過來的),這時候dev的分支回到了dev2,再把貯存區的代碼還原回來(即dev4的代碼),再作為一個新的開發分支推送到遠程分支,然后這個就是沒有了測試分支的代碼的開發分支
具體的操作驗證
1.查看日志,記錄需還原的commit版本號, git log --pretty=oneline
git log --pretty =oneline

 

 

 


2.撤銷已提交的commit,回滾到測試分支誤合並到開發分支的commit版本
git reset --mixed 回滾版本號

 

 

 

3.再次使用git log可以看到當前HEAD指向了測試分支誤合並到開發分支的commit版本

 

 

 

這時候我們的代碼區多了很多未暫存的文件

 

 

 

4.把撤銷的代碼文件暫存起來
git stash save ‘保存撤銷的代碼’

 

 

 

5.再撤銷當前commit並且不保留代碼(因為這里的代碼是測試分支的,我們不需要這些代碼)
git reset --hard HEAD^

 

 

 


6.把貯存區的代碼重新應用出來
git stash list
git stash apply stash@{0}

 

 

 

7.這時候千萬別pull代碼,如果pull的話,HEAD指針又會指向遠程的dev上最新的commit上,又會自動把測試分支的代碼合並回來,直接把這個分支作為新的開發分支推送到遠程倉庫即可,然后用這個分支作為開發分支開發,最后把這個分支的代碼合並回master分支,這時候就去掉了原來dev分支誤合並的測試分支代碼了,如圖

 

 8.此時可選擇在新建分支后將代碼推送到遠程,用這個新分支代替原分支進行開發,或選擇刪除當前遠程分支把當前分支提交到遠程如下:

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

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

②把當前分支提交到遠程

$ git push origin currentBranch

注:
1.撤銷上次的commit :HEAD~1或者HEAD^
2.git reset --mixed HEAD^
3.git reset --soft HEAD^
4.git reset --hard HEAD^
5.執行完git reset --mixed HEAD^命令后在idea可以看到已經撤銷了剛剛的commit,文件又變回未提交的藍色了
6.mixed 相當於代碼保留,撤銷git commit,同時撤銷git add,代碼回到未暫存區
7.soft相當於代碼保留,撤銷git commit ,不撤銷git add,代碼回到暫存區
8.hard不保留代碼,撤銷git commit,同時撤銷git add,回到了上一次commit的狀態
9. git relog 查看歷史操作

還有一種常見的場景,本來在開發分支進行開發,然后切換到測試環境,合並了代碼,但是這時候忘了切回開發分支,在測試分支提交了代碼,這就導致開發分支少了這次提交的代碼

處理方式一
記錄自己操作過的代碼,切換到開發分支,手動把代碼補充完整,最笨的方法

處理方式二
在測試分支撤銷掉當前提交的commit(git reset --mixed HEAD^),當然遠程的測試分支並沒有撤銷,然后切回開發分支,把剛撤銷的代碼在開發分支重新提交一次即可,最后再開發分支合並到測試分支也不會有任何問題,因為修改的代碼文件是一樣的
————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM