第一種情況 : 撤銷commit檔案
我們先檢視一下log日志:
兩種檢視方法:
- git log 顯示從近到遠的日志記錄,按向下鍵來檢視更多,按 Q 鍵退出檢視日志
- git log --pretty=oneline 簡潔顯示日志記錄
當然還有更多檢視 log 的方法,就不展示了,自行百度吧.

前五次送出是已經 push 到遠端倉庫的,第六次是 commit 的,然後我突然不想 commit 了,我想撤銷,好嘞,git 指令嗨起來
git reset --hard 送出id
意思就是,你要撤銷第六次 commit ,你就要把 HEAD 指向 第五次,是以 reset 一下 HEAD 就好啦
注意:工作空間的代碼的改動就沒啦
如果想保留工作空間的代碼隻是撤銷commit,請執行下面的指令:
git reset --soft HEAD^
HEAD^的意思是上一個版本,也可以寫成HEAD~1
如果你進行了2次commit,想都撤回,可以使用HEAD~2
ps : git status 檢視目前檔案的狀态
至于這幾個參數:
--mixed
意思是:不删除工作空間改動代碼,撤銷commit,并且撤銷git add . 操作
這個為預設參數,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的。
--soft
不删除工作空間改動代碼,撤銷commit,不撤銷git add .
--hard
删除工作空間改動代碼,撤銷commit,撤銷git add .
注意完成這個操作後,就恢複到了上一次的commit狀态。
第二種情況 : 撤銷push檔案
方法一:
第一步:
git log --pretty=oneline
檢視目前送出的日志
第二步:
git reset --soft XXX
XXX是commitID(d6cdbba417…) 回退目前工作空間的上一個版本,并且保留代碼更改
第三步:
git log --pretty=oneline
再次檢視目前送出的日志,确認是否成功撤銷,當然,你也可以不看,基本上都會成功,保險一下,看看呗
第四步:
git push origin master --force
強制送出目前版本号,以達到撤銷版本号的目的。必須添加參數force進行強制送出,否則會送出失敗,報錯原因:本地項目版本号低于遠端倉庫版本号。(master 代表分支名稱,預設是 master)
注意:這種強制送出的方法隻有owner的時候可以用
你看,github上第五次送出也撤回咯
方法二
我們來看圖分析,一步步來做
最後一次送出的備注是:NNNNNN送出
倒數第二次送出的備注是:MMMMM送出
我們目标:回退最後一次送出 NNNNNN送出,讓工作空間的代碼回到 MMMMM送出 的狀态。
第一步:
git log --pretty=oneline
檢視目前送出的日志
第二步:
git revert commitID
revert你想回退的版本
第三步:
會進入一個新的編輯界面,編寫commit的資訊
第四步:
git log --pretty=oneline
再次檢視目前送出的日志
第五步:
push 代碼
(git push或者用AS push)
看遠端送出資訊:
git reset 和 git revert 的差別
- git revert是用一次新的commit來復原之前的commit,git reset是直接删除指定的commit。
- 在復原這一操作上看,效果差不多。但是在日後繼續merge以前的老版本時有差別。因為git revert是用一次逆向的commit“中和”之前的送出,是以日後合并老的branch時,導緻這部分改變不會再次出現,但是git reset是之間把某些commit在某個branch上删除,因而和老的branch再次merge時,這些被復原的commit應該還會被引入。
- git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,隻是新的commit的内容和要revert的内容正好相反,能夠抵消要被revert的内容。