https://www.jianshu.com/p/491a14d414f6
第一種情況 : 撤銷commit文件
我們先查看一下log日志:
兩種查看方法:
1、git log
顯示從近到遠的日志記錄,按向下鍵來查看更多,按 Q
鍵退出查看日志
2、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狀態。
[root@localhost demo]# git log --pretty=oneline 523ebcf06cff1b5699bbc34fa67b3363757557e7 add show_dup fun to show all segs of udp 1af49a8e67d5d4907ab14d9d541dfb29e8974687 add ip reassembly project and support arp 88a212f8ffac44dd36685c7f02aef3c03707e908 adjust offoad parameter a51e6f5a16a2a048b390e545da6ca887721fd3e5 test tcp offload 97abdc76f71f5aee491657130cc48bfd8bc288a4 add tcp client 840e0cbbefcd25d3d26716e484332446c2624791 add simple web based on dpdk ebf8d5f15328528a08e25b09c1fe7d3c322830cb add simple web based on dpdk 65fc79b3fd16ab75d944d7461ac46572f240d686 add simple web based on dpdk 49b64992f8751b9495f11445449d27cb5f12f32c rm dpdk-pingpong build c7eb0a3790dafed016f9476468b77c9069a4bd9e rm dpdk-pingpong build c737808f40ef0ee4aae7b1dcba9873bde258307c rm dpdk-pingpong build 40334174fb2046ab9fa4a93f11a28827c843fbd4 add dpdk-pingpong dpdk-flow dpdk-ring-ping 0455bc817b810c41ddd4571c9ec249b3ddc82431 rm dpdk-pingpong dpdk-flow dpdk-ring-ping 82bfe27de59e4b59a88cf88a2ee5eb453d6a0ac3 add dpdk test demo 3f976c6399d110600aac8ee7341b7d428cf16920 Merge branch 'master' of https://github.com/magnate3/dpdk 6bef1003b3156eacd2f7fddad33a714cd870dcca add dpdk test demo b5d46b7f4d66e8cc2c03576638c7deba1e52b788 Initial commit [root@localhost demo]# git reset --soft HEAD^ fatal: Cannot do a soft reset in the middle of a merge. [root@localhost demo]#
第二種情況 : 撤銷push文件
方法一:
第一步: git log --pretty=oneline 查看當前提交的日志
第二步: git reset --soft XXX XXX是commitID(d6cdbba417....) 回退當前工作空間的上一個版本,並且保留代碼更改
第三步: git log --pretty=oneline 再次查看當前提交的日志,確認是否成功撤銷,當然,你也可以不看,基本上都會成功,保險一下,看看唄
第四步: git push origin master --force 強制提交當前版本號,以達到撤銷版本號的目的.必須添加參數force進行強制提交,否則會提交失敗,報錯原因:本地項目版本號低於遠端倉庫版本號。(master 代表分支名稱,默認是 master,或者也可以直接用 git push --force)
注意:這種強制提交的方法只有owner的時候可以用

你看,github上第五次提交也撤回咯