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版本状态