Git 系列教程(6)- 查看 commit 提交历史
查看提交历史
在提交了若干更新,又或者克隆了某个项目之后,如何查看提交历史
git log
官方栗子
运行下面的命令获取该项目:
git clone https://github.com/scha
运行 git log 命令

可以获取到的信息
- 不传入任何参数的默认情况下,
git log会按时间先后顺序列出所有的提交,最近的更新排在最上面 - 会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明
git log 常见命令行参数
- -p、--patch:它会显示每次提交所引入的差异(按 patch 的格式输出)。
- -n:n 是数目,限制显示的日志数量,比如 -2,输出两条

-p 除了显示基本信息之外,还附带了每次提交的变化,好处:当进行代码审 review 时,可以快速看到别人提交代码的差异
--stat
看到每次提交的简略统计信息

每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了
--pretty
可以使用不同格式来显示提交历史,有一些内建的子选项供你使用。

--pretty=oneline
将每个提交放在一行显示,在浏览大量的提交时非常有用

另外还有 short,full 和 fuller 选项,它们展示信息的格式基本一致,但是详尽程度不一
--pretty=format
可以定制记录的显示格式
这样的输出对后期提取分析格外有用,因为输出的格式不会随着 Git 的更新而发生改变

git log --pretty=format 常用的选项
列出了 format 接受的常用格式占位符的写法及其代表的意义
| 选项 | 说明 |
|---|---|
|
|
提交的完整哈希值 |
|
|
提交的简写哈希值 |
|
|
树的完整哈希值 |
|
|
树的简写哈希值 |
|
|
父提交的完整哈希值 |
|
|
父提交的简写哈希值 |
|
|
作者名字 |
|
|
作者的电子邮件地址 |
|
|
作者修订日期(可以用 --date=选项 来定制格式) |
|
|
作者修订日期,按多久以前的方式显示 |
|
|
提交者的名字 |
|
|
提交者的电子邮件地址 |
|
|
提交日期 |
|
|
提交日期(距今多长时间) |
|
|
提交说明 |
当 oneline 或 format 与另一个 log 选项 --graph 结合使用时尤其有用,展示你的分支、合并历史:
git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
git log 输出格式的常用选项
| 选项 | 说明 |
|---|---|
|
|
按补丁格式显示每个提交引入的差异。 |
|
|
显示每次提交的文件修改统计信息。 |
|
|
只显示 --stat 中最后的行数修改添加移除统计。 |
|
|
仅在提交信息后显示已修改的文件清单。 |
|
|
显示新增、修改、删除的文件清单。 |
|
|
仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。 |
|
|
使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。 |
|
|
在日志旁以 ASCII 图形显示分支与合并历史。 |
|
|
使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。 |
|
|
|
限制输出长度
- -n:限制输出提交历史的数量
- --since、--until:按照时间限制
下面的命令会列出最近两周的所有提交
git log --since=2.weeks
- 该命令可用的格式十分丰富
- 可以是类似
"2008-01-15"的具体的某一天,也可以是类似"2 years 1 day 3 minutes ago"的相对日期。
git lot 限制输出的选项
| 选项 | 说明 |
|---|---|
|
|
仅显示最近的 n 条提交。 |
|
|
仅显示指定时间之后的提交。 |
|
|
仅显示指定时间之前的提交。 |
|
|
仅显示作者匹配指定字符串的提交。 |
|
|
仅显示提交者匹配指定字符串的提交。 |
|
|
仅显示提交说明中包含指定字符串的提交。 |
|
|
仅显示添加或删除内容匹配指定字符串的提交。 |
|
|
仅显示某些文件或目录的历史提交,-- 文件名/目录名 |
|
|
不显示合并提交的历史记录 |
来看一个实际的例子,如果要在 Git 源码库中查看 Junio Hamano 在 2008 年 10 月其间, 除了合并提交之外的哪一个提交修改了测试文件,可以使用下面的命令:
$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
Git 系列教程(6)- 查看 commit 提交历史的更多相关文章
- [译]Atlassian Git系列教程
国庆期间把Atlassian的Git系列教程看完了.边看边翻译了相关文章. 原教程: https://www.atlassian.com/git/tutorials/ 我翻译的: git init g ...
- 编译CM13源码添加来去电归属地 SudaMod开源项目,查看commit提交记录
这个问题纠结了很多时间,感谢苏打先森@Sudamod的开源项目. 大家知道CM13是没有来去点归属地的,就算有那也是google,对于中国人不适用,所以这里把方法贡献出来. 1.与通话有关的app D ...
- 痞子衡嵌入式:第一本Git命令教程(5)- 提交(commit/format-patch/am)
今天是Git系列课程第五课,上一课我们做了Git本地提交前的准备工作,今天痞子衡要讲的是Git本地提交操作. 当我们在仓库工作区下完成了文件增删改操作之后,并且使用git add将文件改动记录在暂存区 ...
- Git——快速重命名文件和查看commit提交版本【四】
快速重命名文件 $ git mv README.md readme.md 使用git mv命令后直接commit即可,不再需要进行add或rm操作 查看版本历史 所有的参数都可以进行组合使用的,比如我 ...
- git查看commit提交记录详情
相关的命令: git log:查看所有的commit提交记录: git show: 查看提交的详情: 首先,需要通过git log打印所有commit记录,例如: 1.查看最新的commit:git ...
- git 查看commit提交的内容
在使用git的过程中,我们经常需要查看某次commit修改了哪些内容,与之相关的命令就是: git log git show 首先,需要通过git log打印所有commit hashID,之后的gi ...
- Git 实用操作:撤销 Commit 提交
有的时候,改完代码提交 commit 后发现写得实在太烂了,连自己的都看不下去,与其修改它还不如丢弃重写.怎么操作呢? 使用 reset 撤销 如果是最近提交的 commit 要丢弃重写可以用 res ...
- Git 系列教程(7)- 撤销操作
撤销操作 在任何一个阶段,你都有可能想要撤销某些操作 有些撤销操作是不可逆的 --amend 修补提交 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了. 此时,就可以运行带有 -- ...
- Git 系列教程(9)- 打标签
打标签 一般会给提交历史打个标签,方便后续进行筛选.查看 列出标签 可带上可选的 -l 选项 --list $ git tag v1.0 v2.0 这个命令以字母顺序列出标签 可以按照特定的模式查找标 ...
随机推荐
- 项目去O实践
现状(自下而上) 1.Oracle数据库,表,序列,存储过程,视图 2.ibatis框架,映射xml中的sql语句 3.应用中通过指定字符串的形式获取查询结果 目标 1.置换数据库为PG数据库,迁 ...
- 干了5年Android开发,突然感觉自己啥也不会,啥也不想干,还要继续吗?
这是在某论坛看到的一名同行的吐槽: 我干了差不多5年,不过给人感觉跟只有两三年的人一样. 我觉得我不适合干程序员,主要是新东西的接受能力比其他人慢,Android技术又更新得很快,感觉总是跟不上.年纪 ...
- 线程创建的三种方法:继承Thread类,实现Runnable接口,实现Callable接口
线程创建 三种创建方式 1. 继承Thread类 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用start()方法启动线程 线程不一定执行,CPU按排调度 pa ...
- Create Shortcut for SSH Hosts
You frequently visit host 10.0.7.141 for example. It's a waste to type "ssh gcp@10.0.7.141" ...
- 【笔记】二分类算法解决多分类问题之OvO与OvR
OvO与OvR 前文书道,逻辑回归只能解决二分类问题,不过,可以对其进行改进,使其同样可以用于多分类问题,其改造方式可以对多种算法(几乎全部二分类算法)进行改造,其有两种,简写为OvO与OvR OvR ...
- Lab: 2FA bypass using a brute-force attack:暴力破解双重验证靶场复盘(困难级别)
靶场内容: This lab's two-factor authentication is vulnerable to brute-forcing. You have already obtained ...
- VLAN-4 单臂路由实现vlan之间路由
一.实验拓扑图 二.实验编址 三.实验步骤 1.给对应的PC设置对应的IP和掩码还有接口,以及根据需要划分不同的vlan区域,再用文本标记出不同部门. 2. 启动设备(全选) 3.创建vlan并配置a ...
- .net 温故知新:【5】异步编程 async await
1.异步编程 异步编程是一项关键技术,可以直接处理多个核心上的阻塞 I/O 和并发操作. 通过 C#.Visual Basic 和 F# 中易于使用的语言级异步编程模型,.NET 可为应用和服务提供使 ...
- SpringBoot监听redis过期key
开启过期监听 vim /etc/redis.conf 取消notify-keyspace-events Elg的注释 pom.xml 添加: <dependency> <groupI ...
- 常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)
大家好,我是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用的正则表达式 最后实战爬取小说网页:重点在于爬取的网页通过正则表达式进行解析. 正则表达式语法 Python的re模块( ...