git-版本回滚-git revert【删除提交】

1、场景简介

git reset的方法很好,可以实现代码的操作撤销的动作,reset撤销动作一旦执行后,原来的历史记录就没有了,但是我们知道人是会犯错的,肯定会出现不小心想错了,做了不该撤销的撤销,这个时候我们只能重新
再来做一遍了,而这一次重写不一定能完全顺利,所以有没有一种撤销不但能实现撤销的效果,还能留住之前的commit历史记录呢? revert 可以考虑一下。

2、原理解析

2.1、原理图

2.2、原理说明

git revert的提交流程跟git commit一样,但是他们提交的内容是完全相反的。

revert执行前: 最初版本经过commit
+a.txt 后到达A版本,经过commit +b.txt 后到达B版本,在经过commit +c.txt 后到达C版本
revert执行后: C版本经过commit
-a.txt后到达D版本,正好是commit A版本的逆过程
注意: revert操作后版本会递增(D),不影响之前提交的内容(B
+C),只不过撤销版本(A)的内容删除罢了 revert VS reset git revert不像git checkout|reset可以用于文件和commit对象,它只能作用于commit对象。 revert用于撤销已committed的变化,reset用于撤销uncommitted changes

2.3、revert命令解析

命令格式:git revert <commited_id|HEAD>
注意:revert 有一个参数 --abort 用于撤销该次回滚 

3、revert实践

3.1、准备工作

# 在一个初始环境中,进行三次正常的代码提交
mkdir /data/revert && cd /data/revert
git init
echo first > a.txt; git add a.txt; git commit -m "A"
echo second > b.txt; git add b.txt; git commit -m "B"
echo three > c.txt; git add c.txt; git commit -m "C"
# git log --pretty=format:"%h - %an, %ar : %s" --graph
* 7fd391d - 277667028@qq.com, 2 minutes ago : C
* 4ea31f7 - 277667028@qq.com, 2 minutes ago : B
* 3f8c2d2 - 277667028@qq.com, 2 minutes ago : A

3.2、实践

# 我想撤销B版本的修改(A版本增加b.txt后变成B版本的) ,效果:会把B版本相关的文件删除,重新编写。
git revert 4ea31f7
git status
git log --all --graph --oneline

注意:
  在执行revert命令的时候,不要在暂存区有内容,因为revert只针对commited内容,否则的话会报错
  error: your local changes would be overwritten by revert.
  hint: commit your changes or stash them to proceed.
  fatal: revert failed 

# 日志效果
]# git log --all --graph --oneline
* 50b35bd (HEAD -> master) Revert "B"
* 7fd391d C
* 4ea31f7 B
* 3f8c2d2 A

# ll
drwxr-xr-x 8 root root 4096 Jun 11 04:35 .git/
-rw-r--r-- 1 root root    6 Jun 11 04:31 a.txt
-rw-r--r-- 1 root root    6 Jun 11 04:31 c.txt

 

posted @ 2023-06-11 12:48  小粉优化大师  阅读(187)  评论(0编辑  收藏  举报