git-撤销提交git reset、日志查看git log

1、提交日志查询【git log】

1.1、git log 简介

只要是人为操作的地方,都避免不了出错,所以我们肯定会遇到撤消刚才所做的某些操作。而某些撤销操作可能是不可逆的,所以必须小心。有了log记录的帮助,会大大提高我们的文件撤销动作的效率。

1.2、git log命令解析

1.2.1、命令格式

命令格式:git help log
git log [<options>] [<revision range>] [[--] <path>...]

注意:
git log 默认情况下,仅仅显示的是当前分支的提交记录,如果当前仓库所有分支的所有的提交记录的话,可以结合 --all 参数就可以了

1.2.2、常见参数

-p -n(num)
 -p 详细显示每次提交的内容差异,-1 仅显示最近的两次更新

--stat 
 显示简要的增改行数统计

--pretty
 git log内置了很多的样式,可以通过 --pretty参数来设置自己想要看到的效果,
 最常见的有: oneline,short,full 和 fuller。

--graph
 以图形格式显示具体的代码提交流转图示,
 特别是在分支场景下,更能形象地展示每个提交所在的分支及其分化合并情况。

--pretty=format"自定义属性组合样式"
 虽然git log 内置的记录效果很好,但是毕竟是通用的,功能不强大,而git帮我们提供了一个format的
 属性,我们可以基于一些内置变量,自定义历史记录的显示格式,这些内置变量可以获取到不同的记录信息

1.2.3、--pretty=format格式化参数介绍

变量    属性详解
%H      # 提交对象(commit)的完整哈希字串 
%t      # 树对象的简短哈希字串 
%P      # 父对象(parent)的完整哈希字串
%h      # 提交对象的简短哈希字串
%T      # 树对象(tree)的完整哈希字串 
%p      # 父对象的简短哈希字串
%an     # 作者(author)的名字 
%ae     # 作者的电子邮件地址
%ad     # 作者修订日期(用-date=定制格式)
%ar     # 作者修订日期,按多久以前的方式显示 
%cn     # 提交者(committer)的名字 
%ce     # 提交者的电子邮件地址
%cd     # 提交日期 
%cr     # 提交日期,按多久以前的方式显示 
%s      # 提交说明

1.3、git log的实践

1.3.1、简单查看

git log 
git log -p -1
git log --stat -1

1.3.2、格式化展示

git log --pretty=oneline
git log --pretty=short
git log --pretty=full
git log --pretty=fuller
git log --pretty=format:"%h - %an, %ar : %s" -2
git log --pretty=format:"%an %ae %ad %cn %ce %cd %cr %s" -1

1.3.3、图形展示

git log --pretty=oneline --graph

1.3.4、推荐方法

git log --all --graph --oneline

2、撤销提交、撤销暂存【git commit、git reset】

2.1、撤销提交、撤销暂存简介

撤销动作根据对象的不同,主要有两种:文件级别撤销、仓库级别撤销。
文件级别撤销,常见的有以下几种:

1、撤销提交
 命令详解:git commit --amend -m "注释"
 参数说明:
 --amend 的作用就是在提交代码的时候,将本地提交的commit记录覆盖上一次的commit记录。
 相当于做了一次删除上次提交,重新做一次提交,关键在于两次提交只有一个最终的commit记录。 

2、撤销暂存
 命令格式:git reset <commit_it> <file_name1> ... <file_namen>

 注意:
 该命令执行成功的前提是,我们知道在指定的commit_id版本下有指定的file_name文件。
 如果要恢复多个文件的话,就写多个文件就可以了,彼此间用逗号隔开。
 当 <commit_it> 是HEAD时,表示将当前暂存区中的文件移除,该文件从哪里来回到那里去,仓库级别撤销。

3、版本回滚(无痕迹)
 git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit_id>]

4、版本回滚(有痕迹)
 git revert <commited_id|HEAD>

2.2、撤销提交实践【--amend】

2.2.1、场景需求

某开发团队的A同学,在经过辛辛苦苦的工作后,开发好的代码提交到了本地仓库,准备清空多余文件的时候,突然浑身一冷,发现刚才提交错了,关键的文件遗漏了。
所以A同学这个时候遇到了一个问题:需要将刚才的提交给撤销掉,重新将正确的文件提交到本地仓库。
该动作涉及三个区域:代码仓库-工作目录-暂存区

2.2.2、模拟提交一下

echo "chexiao" > chexiao.txt
git add .
git commit -a -m "chexiao.txt"
git log

2.2.3、覆盖提交--amend

# 想要撤消刚才的提交操作,可以使用 --amend 选项重新提交,该参数的作用就是在刚才暂存区数据的基础上,增加一些内容,然后做一次提交,只不过这次提交会将刚才的那次提交记录给覆盖掉,相当于将上一次提交撤销了。
echo 'test test' > test.txt
git add zailai.txt
git commit --amend -m "test new"
git log

2.3、撤销暂存实践【git reset】

2.3.1、需求

某团队有 A-E 5个人,A基于标准的代码进行功能开发,为了完成一个功能H,工作了几个小时,在提交的时候,发现代码仓库中已经有B同学将标准的功能H完成了,而且提交到了代码仓库,A同学发现B同学写的代
码效果比自己的好,既然有好的,那么就用好的嘛。
所以这个时候,A同学就需要面对一个问题:将本地暂存的内容给取消掉。

2.3.2、提交版本AA、BB

# 将所有文件都添加到版本AA中,然后在增加一些文件,并提交到版本BB中
echo aa >> aa.txt
git add . 
git commit -m "AA"
echo bb >> bb.txt
git add bb.txt
git commit -m "BB"

2.3.3、查看提交信息

root@localhost:/data/git# git log --pretty=format:"%h - %an, %ar : %s" --graph -2
* cd95349 - 2776670**@qq.com, 2 minutes ago : BB
* 5566d51 - 2776670**@qq.com, 3 minutes ago : AA

2.3.4、要将BB版本的bb.txt文件回滚到AA版本

我们要将BB版本的bb.txt文件回滚到AA版本
 git reset 5566d51 bb.txt
 git status
     当前代码仓库效果
     位于分支 master
     要提交的变更:
       (使用 "git reset HEAD <文件>..." 以取消暂存)
        删除: bb.txt
     未跟踪的文件:
       (使用 "git add <文件>..." 以包含要提交的内容)
        bb.txt

可以看到:我们已经将bb.txt文件从BB版本库中,拉回到了AA版本状态

 

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