簡介
在使用git管理代碼過程中,很多人應該遇到過一些場景:我已經提交了commit信息,但是我想反悔,不想提交了這個信息,或者公共分支上我提交了commit信息,別人也提交了commit,但是我的commit的代碼有些問題,想撤回來不提交。
這種情況下有很多的方式來解決,無非是操作多少和風險的大小而已,比如:
-
公共分支上找到不同分支的父節點,reset以后才重新提交,但是當commit信息混合到一起后,你想找都commit信息都困難。
-
還有一種相對省事的方法你在自己的分支上把不要的都干掉后重新提交,但是如果是上線時候,這樣風險也很大。
-
當然還有其他的一些方式方法
還有一種相對簡單的方式,那就是 revert 方式(反做撤銷)。也就是這篇文章的主角。
git revert基礎用法
基礎語法
git revert -n commit-id
-
只會反做commit-id對應的內容,然后重新commit一個信息,不會影響其他的commit內容
反做多個commit-id
git revert -n commit-idA..commit-idB
-
反做commit-idA到commit-idB之間的所有commit
-
注意:使用-n是應為revert后,需要重新提交一個commit信息,然后在推送。如果不使用-n,指令后會彈出編輯器用於編輯提交信息
沖突的相關操作
-
在git操作過程中,最不想看到的一種情況就是沖突,但是,沖突就是一個狗皮膏葯,永遠避免不了,revert也跑不了這個魔咒,那么我們改怎么處理這個情況
合並沖突后退出
git revert --abort
-
當前的操作會回到指令執行之前的樣子,相當於啥也沒有干,回到原始的狀態
合並后退出,但是保留變化
git revert --quit
-
該指令會保留指令執行后的車禍現場
合並后解決沖突,繼續操作
-
如果遇到沖突可以修改沖突,然后重新提交相關信息
git add .
git commit -m "提交的信息"
總結
Git reset和git revert的區別
-
git reset 是回滾到對應的commit-id,相當於是刪除了commit-id以后的所有的提交,並且不會產生新的commit-id記錄,如果要推送到遠程服務器的話,需要強制推送-f
-
git revert 是反做撤銷其中的commit-id,然后重新生成一個commit-id。本身不會對其他的提交commit-id產生影響,如果要推送到遠程服務器的話,就是普通的操作git push就好了