git revert简单记录

Git  2024年8月9日 pm3:15发布4个月前更新 城堡大人
203 1 0

前言

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. 2023: JNI异常的使用(0条评论)
  2. 2022: 自定义SeekBar样式(0条评论)
  3. 2019: 沈从文 : 独处(0条评论)
  4. 2018: Settings源码分析之蓝牙(1)(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

1 条评论

  • 一位 WordPress 评论者

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

    回复

随机推荐

[摘]深入浅出UML类图(一)

本文作者:刘伟  http://blog.csdn.net/lovelion在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Mod...

郁达夫:北平的四季

对于一个已经化为异物的故人,追怀起来,总要先想到他或她的好处;随后再慢慢的想想,则觉得当时所感到的一切坏处,也会变作很可寻味的一些纪念,在回忆里开花。关于一个曾经住过的旧地,觉得此生再也不会第二次去长住了,身处入了远离的一角,向这方向的云天遥望一下,回想起来的,自然也同样地只是它的好处。中国的大都...

C语言之指针数组和数组指针

前言简单记录一下指针数组和数组指针之间的区别。正文由于很容易搞混,因此这里做一下记录。指针数组指针数组是指具有若干个相同存储类型和数据类型的[指针变量]构成的组合。指针数组的一般形式:存储类型 数据类型 * 指针数组名 [大小]//指针数组,类型是int * 所以叫int型指...

内存分析工具MAT简单记录

前言MAT(Memory Analyzer Tool,一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,...

Kotlin字符串

前言简单记录一下Kotlin字符串。主要是方便自己查阅。正文字符串一个字符串可以包含一个或者多个字符,也可以不包含任何字符,即长度为0。var mString: String = "谷歌一下"var mString2 = "百度一下"遍历字符串遍历也是很多种,下面列举验证过的遍历...

林白:过程

一月你还没有出现二月你睡在隔壁三月下起了大雨四月里遍地蔷薇五月我们对面坐着 犹如梦中 就这样六月到了六月里青草盛开 处处芬芳七月,悲喜交加 麦浪翻滚连同草地 直到天涯八月就是八月八月我守口如瓶 八月里我是瓶中的水 你是青天的云九月和十月是两只眼睛,装满了大海你在海上 我在海下...