前言

git revert是撤销中间某次commit。今天就简单记录部分常用的,方便自己查阅。

正文

git revert 格式:

$ git revert -h
usage: git revert [<options>] <commit-ish>...
  or: git revert <subcommand>

  --quit               end revert or cherry-pick sequence
  --continue           resume revert or cherry-pick sequence
  --abort               cancel revert or cherry-pick sequence
  -n, --no-commit       don't automatically commit
  -e, --edit           edit the commit message
  -s, --signoff         add Signed-off-by:
  -m, --mainline <n>   parent number
  --rerere-autoupdate   update the index with reused conflict resolution if possible
  --strategy <strategy>
                        merge strategy
  -X, --strategy-option <option>
                        option for merge strategy
  -S, --gpg-sign[=<key-id>]
                        GPG sign commit

git revert 命令不会删除已经提交的更改,而是用于撤销这些更改并将它们保存在仓库中。

参数命令介绍

git revert –edit

需要编辑撤退记录信息

-e, --edit            edit the commit message

–edit或-e是默认,可以省略。

git revert --edit 9cd9045

git revert 9cd9045

上面两个效果一样。

git revert –no-edit

–no-edit就是撤退使用默认撤退记录即可,不需要重新编辑。

git revert --no-edit 9cd9045
git revert -n
-n, --no-commit       don't automatically commit

-n 和 –no-commit是一样的,撤退至暂停暂存区,不主动提交撤退记录。

git revert -n 8633135
$ git status .
On branch bq_car_emc
Your branch is up-to-date with 'origin/bq_car_emc'.
You are currently reverting commit 8633135.
(all conflicts fixed: run "git revert --continue")
(use "git revert --abort" to cancel the revert operation)

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

      modified:   BiuMusic/src/main/java/com/biu/music/mediaservice/MusicPlayerService.java

如果要撤退或继续上面都有提示

//继续撤回提交
git revert --continue
//放弃撤回
git revert --abort
git revert -m
 -m, --mainline <n>    parent number

这部分内容看参考文三,我这里主要摘抄

git revert 时,需要分两种情况:一种是常规的commit,也就是使用git commit提交的commit;另一种是merge commit,在使用 git merge合并两个分支之后,你将会得到一个新的 merge commit。

merge commit 和普通 commit 的不同之处在于 merge commit 包含两个 parent commit,代表该 merge commit 是从哪两个 commit 合并过来的。

显示使用git log –graph –oneline展示提交记录。

 

有分支就表示是存在合并

$ git show bd86846
commit bd868465569400a6b9408050643e5949e8f2b8f5
Merge: ba25a9d 1c7036f

上面提示合并过bace436 1689a48

$ git show 39e50b3
commit 3e853bdcb2d8ce45be87d4f902c0ff6ad00f240a

也就是说revert 存在两种情况

  1. 常规撤销

  2. 合并撤销

常规撤销

这种就是上面使用的命令,也是常见的。

合并撤销

如上面的例子中,从 git show 命令的结果中可以看到,merge commit 的 parent 分别为 ba25a9d 和 1c7036f,其中 ba25a9d 代表 master 分支(从图中可以看出),1c7036f 代表 will-be-revert 分支。需要注意的是 -m 选项接收的参数是一个数字,数字取值为 1 和 2,也就是 Merge 行里面列出来的第一个还是第二个。

保留主分支,应该设置主分支为主线,操作如下:`

$ git revert -m 1 bd86846

简单测试

撤销单个提交

后面只跟commit-ish

git revert <commit-ish>

这里撤回 d26e8fecda82c4981024a00f1cd70236baa74c2d

git revert 9cd9045
撤销多个提交

撤销多个,可以制定范围。

多个的区间 (commit-ish1,commit-ish2],也就是开始commit-ish1是不撤回的,到后面的commit-ish2是要撤回的。

git revert <commit-ish1>..<commit-ish2>

git revert <commit-ish1>..

这里展示撤回指定区间

//66bbe53在9cd9045之前提交的
//(66bbe53,9cd9045]
git revert 66bbe53..9cd9045

使用多条撤回前

$ git log --oneline
9cd9045 water:屏蔽倒车
5f9244c water:屏蔽下线配置
66bbe53 water:屏蔽TA高亮
8633135 water: 新增音乐实时记忆

使用多条撤回后

$ git log --oneline
d60612d Revert "water:屏蔽下线配置"
f95bb21 Revert "water:屏蔽倒车"
9cd9045 water:屏蔽倒车
5f9244c water:屏蔽下线配置
66bbe53 water:屏蔽TA高亮
取消撤回操作
git revert --abort
继续撤回操作
git revert --continue 

参考文章

  1. git 官方文档

  2. git revert命令用法详解

  3. Git 之 revert

 

相关文章

1 条评论

  • 一位 WordPress 评论者

    您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 <a href="https://cn.gravatar.com/">Gravatar</a>。

    无记录
    回复