git revert 详解

工作中难免会遇到一些commit需要回退,可以用reset和revert。

reset是回朔到指定的commit版本,指定的commit版本之后的操作commit都重置了。revert是删除指定的commit操作的内容,指定的commit之前和之后commit操作都不受影响,与此同时这个操作也会作为一个commit进行提交。

但对于已经提交到远端的公共分支比如master上的commit只能用revert来进行回退操作,具体用法如下所示:

这是当前工作区域log的情况

bash-3.2$ git log
commit 6a43ed02f5831c9b91df9ae0dbfb9561d1ec2bb2
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:18 2017 +0800

    add e.go

commit 6a307a975fa676954c61078a3d786ef4ba084fd1
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:02 2017 +0800

    add d.go

commit 0bf71363290e8db926d442234eefb4cee2b3fdc8
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:41 2017 +0800

    add c.go

commit 6a2cc3dd8385004a5b9145630cb0b67498155c6b
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:23 2017 +0800

    add b.go

commit d672cd988198d3aec6faaccf0e39ab38e2304d19
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:53:00 2017 +0800

    add a.go

commit 2405994636350db65ec02adcbb3a6f356140b075
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:51:13 2017 +0800

    Create README.md

commit a432247e2acad106b7386d610df21ee1afbeaac6
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:51:03 2017 +0800

    Initial commit

1.比如你当前想回退某个commit

比如如下commit

commit d672cd988198d3aec6faaccf0e39ab38e2304d19
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:53:00 2017 +0800

    add a.go

方式一:bash-3.2$ git revert HEAD~4

用法: 当前commit为HEAD,然后每一个commit加一得到要撤销的commit 为HEAD~4

commit 6a43ed02f5831c9b91df9ae0dbfb9561d1ec2bb2  HEAD
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:18 2017 +0800

    add e.go

commit 6a307a975fa676954c61078a3d786ef4ba084fd1   HEAD~1
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:02 2017 +0800

    add d.go

commit 0bf71363290e8db926d442234eefb4cee2b3fdc8   HEAD~2
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:41 2017 +0800

    add c.go

commit 6a2cc3dd8385004a5b9145630cb0b67498155c6b   HEAD~3
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:23 2017 +0800

    add b.go

commit d672cd988198d3aec6faaccf0e39ab38e2304d19   HEAD~4
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:53:00 2017 +0800

    add a.go

方式二:bash-3.2$ git revert d672cd988198d3aec6faaccf0e39ab38e2304d19 或者 git revert d672cd9

用法: git revert + 完整的commit或者该commit前7位即可

bash-3.2$ git log
commit 3c149a450e2b86218a588423e116ee678acc2514
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 15:04:37 2017 +0800

    Revert "add a.go"

    This reverts commit d672cd988198d3aec6faaccf0e39ab38e2304d19.

commit 6a43ed02f5831c9b91df9ae0dbfb9561d1ec2bb2
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:18 2017 +0800

    add e.go

commit 6a307a975fa676954c61078a3d786ef4ba084fd1
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:02 2017 +0800

    add d.go

commit 0bf71363290e8db926d442234eefb4cee2b3fdc8
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:41 2017 +0800

    add c.go

commit 6a2cc3dd8385004a5b9145630cb0b67498155c6b
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:23 2017 +0800

    add b.go

commit d672cd988198d3aec6faaccf0e39ab38e2304d19
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:53:00 2017 +0800

    add a.go

2.回退连续的几个commit,这种情况比较常见

比如回退最新的三个commit:HEAD,HEAD~1,HEAD~2

commit 6a43ed02f5831c9b91df9ae0dbfb9561d1ec2bb2   HEAD
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:18 2017 +0800

    add e.go

commit 6a307a975fa676954c61078a3d786ef4ba084fd1   HEAD~1
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:02 2017 +0800

    add d.go

commit 0bf71363290e8db926d442234eefb4cee2b3fdc8   HEAD~2
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:41 2017 +0800

    add c.go

commit 6a2cc3dd8385004a5b9145630cb0b67498155c6b   HEAD~3
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:23 2017 +0800

    add b.go

commit d672cd988198d3aec6faaccf0e39ab38e2304d19   HEAD~4
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:53:00 2017 +0800

    add a.go
    
commit 2405994636350db65ec02adcbb3a6f356140b075   HEAD~5
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:51:13 2017 +0800

    Create README.md

commit a432247e2acad106b7386d610df21ee1afbeaac6   HEAD~6
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:51:03 2017 +0800

    Initial commit

比如最新的三个commit有问题需要回退 git revert X...Y

用法: X...Y 代表一个左开右闭区间(X,Y],不包括X,包括Y. 其中Y为起点commit,X为终点commit的下一个commit

方式一:
bash-3.2$:git revert HEAD~3...HEAD

方式二:
git revert 6a2cc3d...6a43ed0

或者

git revert 6a2cc3dd8385004a5b9145630cb0b67498155c6b...6a43ed02f5831c9b91df9ae0dbfb9561d1ec2bb2

结果如下:

bash-3.2$ git log
commit af4076c5fe336d877ec36d1580c8b153400981c4
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 15:45:43 2017 +0800

    Revert "add c.go"

    This reverts commit 0bf71363290e8db926d442234eefb4cee2b3fdc8.

commit 9cee5e52f1b4e5a2c3fe8e697c5dda6a844fe923
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 15:45:40 2017 +0800

    Revert "add d.go"

    This reverts commit 6a307a975fa676954c61078a3d786ef4ba084fd1.

commit a75fce274472132cf59f24a7bfb11a8c47295987
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 15:45:38 2017 +0800

    Revert "add e.go"

    This reverts commit 6a43ed02f5831c9b91df9ae0dbfb9561d1ec2bb2.

commit 6a43ed02f5831c9b91df9ae0dbfb9561d1ec2bb2
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:18 2017 +0800

    add e.go

commit 6a307a975fa676954c61078a3d786ef4ba084fd1
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:55:02 2017 +0800

    add d.go

commit 0bf71363290e8db926d442234eefb4cee2b3fdc8
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:41 2017 +0800

    add c.go

commit 6a2cc3dd8385004a5b9145630cb0b67498155c6b
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:54:23 2017 +0800

    add b.go

commit d672cd988198d3aec6faaccf0e39ab38e2304d19
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:53:00 2017 +0800

    add a.go

commit 2405994636350db65ec02adcbb3a6f356140b075
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:51:13 2017 +0800

    Create README.md

commit a432247e2acad106b7386d610df21ee1afbeaac6
Author: asturelizhe <asturelizhe@163.com>
Date:   Sun Apr 23 14:51:03 2017 +0800

    Initial commit
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,549评论 1 26
  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 2,411评论 0 1
  • 任务一 所花时间 40s 有2个地方出错 从整体布局了解这条路线 想象成自己从宿舍到教室走过的地方并且寻找一定的规...
    扶绫阅读 222评论 0 0
  • 郭相麟 人需要独处 也需要共生 人与人之间付出和支持 没有应该和不应该 付出无条件 支持无企图 记住别人的好 忘掉...
    郭相麟阅读 312评论 0 0
  • 有些才能只有时间才能证明给你,慢慢来,不要急,脚踏实地地往前走,时间会给你想要的。 很多人看到“世界上最快的捷径就...
    健身塑形师李永波阅读 1,316评论 2 2