转载自:http://blog.csdn.net/qinjienj/article/details/7621887

我们难免会因为种种原因执行一些错误的commit / push,git提供了revert命令帮助程序员修复这样的错误。

举个例子,下图是git commit 的历史记录

git revert 命令会通过一个新的commit 来使仓库倒退一个commit,在上例中,如果程序员想要revert 最新的那次commit (Updated to Rails 2.3.2 and edge hoptoad_notifier)

$ git revert HEAD
Finished one revert.
[master]: created 1e689e2:
"Revert "Updated to Rails 2.3.2 and edge hoptoad_notifier""

git 会自动生成一个 Revert “Updated to Rails 2.3.2 and edge hoptoad_notifier” 为注释的新 commit,这时的历史记录如下

当然,如果revert不顺利的话,程序员需要手动解决conflict的问题。

通常情况下,上面这条revert命令会让程序员修改注释,这时候程序员应该标注revert的原因,假设程序员就想使用默认的注释,可以在命令中加上-n或者--no-commit,应用这个参数会让revert
改动只限于程序员的本地仓库,而不自动进行commit,如果程序员想在revert之前进行更多的改动,或者想要revert多个commit,这个参数尤其好用。

相比于revert commit,revert merge更麻烦一些,在上例中,revert commit之后,历史记录里面最近的一次即为merge,如果简单使用下面这条revert命令,就会出现错误

$ git revert HEAD~1
fatal: Commit 137ea95 is a merge but no -m option was given.

对于revert merge的情况,程序员需要指出revert 这个merge commit中的哪一个。通过--mainline参数,以及配合一个整数参数,git就知道到底要revert哪一个merge。我们先来看一下要revert的这个merge commit:

$ git log HEAD~1 -1
commit 137ea95c911633d3e908f6906e3adf6372cfb0ad
Merge: 5f576a9... 62db4af...
Author: Nick Quaranto <nick@quaran.to>
Date: Mon Mar 16 16:22:37 2009 -0400 Merging in rails-2.3 branch

如果使用-m 2会revert第二个commit,也就是62db4af。

$ git revert HEAD~1 --no-edit --mainline 2
Finished one revert.
[master]: created 526b346: "Revert "Merging in rails-2.3 branch"" $ git log -1
commit d64d3983845dfa18a5d935c7ac5a4855c125e474
Author: Nick Quaranto <nick@quaran.to>
Date: Mon Mar 16 19:24:45 2009 -0400 Revert "Merging in rails-2.3 branch" This reverts commit 137ea95c911633d3e908f6906e3adf6372cfb0ad, reversing
changes made to 62db4af8c77852d2cc9c19efc6dfb97e0d0067f5.

自动生成的comment也会标示revert的是merge里的哪一个commit。

[Git] git revert ( revert commit 和 revert merge)的更多相关文章

  1. Git IDEA Move or commit them before merge

    提交代码遇到这个问题. Move or commit them before merge 百度了一下都是在Gitbash 中敲命令. 在团队协作中 你总不能去敲命令吧 后来在组长的怂恿下,我删除了一个 ...

  2. IDEA git commit push revert

    Revert uncommitted changes You can always undo the changes you've done locally before you have commi ...

  3. git 常用命令 mv rm checkout revert reset

    关于上节讲的git add 时需要添加注释信息,也可以在git commit时再添加 laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/gi ...

  4. Git error on commit after merge - fatal: cannot do a partial commit during a merge

    Git error on commit after merge - fatal: cannot do a partial commit during a merge this answer is : ...

  5. [Git:commit错误] Fatal: cannot do a partial commit during a merge

    注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 问题场景 今天进行Spring Boot版本升级,解决冲突后进行代码文件提交时出现这个错误. 上午 ...

  6. git 找回丢失的commit

    From : http://dmouse.iteye.com/blog/1797267 git 的错误操作,导致丢失了重要的commit,真是痛不欲生: 最后通过git神器终于找回了丢失的commit ...

  7. 找回Git中丢失的Commit

    在使用Git的过程中,有时候会因为一些误操作,比如reset.rebase.merge等.特别是在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本 ...

  8. Git合并最近的commit

    合并commit的做法一般用在pull request的时候,把开发同一功能时的所有琐碎的commit合并到一个(假装自己的代码是高质量代码(手动滑稽)).主要使用的命令是git rebase 或者g ...

  9. (转)找回Git中丢失的Commit

    总结:更新代码前一定要先将本地修改的文件存到本地git仓库.今天脑残直接更新了远程仓库代码导入今天写的代码...... @[git|commit|reflog] 在使用Git的过程中,有时候会因为一些 ...

随机推荐

  1. tcpcopy 流量复制

    依赖 libpcap 线上服务器安装 https://github.com/session-replay-tools/tcpcopy.git 下载后解压 #--pcap-capture 默认raw s ...

  2. IE6下面的浮动问题

    第一个问题: 在IE6下面overflow:hidden;失效      原因:在IE6/7中子级设置position:relative;属性值后,导致父级的overflow:hidden;失效.   ...

  3. springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置

    web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet- ...

  4. Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)

    题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...

  5. LeetCode解题报告—— Word Search & Subsets II & Decode Ways

    1. Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be con ...

  6. Vue 2.0 生命周期-钩子函数理解

    Vue 2.0 + 生命周期钩子在项目过程中经常用到,所以闲下来整理了下,直接复制下面的实例运行: <!DOCTYPE html> <html lang="en" ...

  7. Redis实现分布式锁 php

    一.分布式锁的作用: redis写入时不带锁定功能,为防止多个进程同时进行一个操作,出现意想不到的结果,so...对缓存进行插入更新操作时自定义加锁功能. 二.Redis的NX后缀命令 Redis有一 ...

  8. 追忆似水流年sed

    sed是一种非交互式的流编辑器,默认情况下并不会修改源文件内容,只是把命令的结果输出处理单位:行功能:查找替换.添加.插入.删除适用场景:常规编辑器难以胜任的文本:大文件(几百兆):有规律的文本修改操 ...

  9. Windows 上面优秀的工具软件推荐

    Windows 上面优秀的工具软件推荐 一.下载软件 1.速盘 - 度盘神器 简介: 使百度网盘保持全速下载免受限速困扰! 下载: speedpan 2.http下载工具 百度网盘破解下载器:prox ...

  10. centos系统mysql数据库忘记密码重置方法(ERROR 1045 28000 Access denied...)

    当mysql的密码错误的时候,就会报如下这样的错误信息 解决方法如下: 首先输入mysqld_safe --skip-grant-tables 然后停止mysql服务,输入service mysqld ...