git-log
概述
git log
命令按照提交时间从最晚到最早的顺序,列出所有 commit。
命令
格式
git log [<options>] [<since>..<until>] [[--] <path>...]
默认列出当前分支的版本历史,按Q退出
git log
--oneline
参数让输出时,每个 commit 只占用一行。--pretty=oneline --abbrev-commit
合用的简写。
git log --oneline
-n
查看最近n次的提交信息
// 查看最近2次的提交历史记录
git log -2
-p
按补丁格式显示每个更新之间的差异。
git log -p -2
搜索查找历史
查找log,即搜索commit信息。
-i
参数表示搜索时忽略大小写。
通过作者搜索
git log --author Andy
通过提交关键字搜索
git log -i --grep=[keywords]
// 该命令会列出所有包含Something字样的提交信息说明的提交记录
git log -i --grep="Something"
通过文件名搜索
列出某个文件的版本历史
git log [file]
列出某个文件的版本历史,包括文件改名
git log --follow [file]
参数
美化输出
--graph
:在日志旁以 ASCII 图形显示分支与合并历史。
--abbrev-commit
:仅显示SHA-1的前7位,而非所有的40个字符。
--decorate
参数用来显示一些相关的信息,如HEAD、分支名、tag名等
--pretty
:使用其他格式显示历史提交信息。可用的选项包括oneline
、short
、full
、fuller
和 format
(用来定义自己的格式)。
git log --graph --decorate --pretty=oneline --abbrev-commit
详解
--name-status
--name-status
参数会带出每次提交对应的文件改动。
git log --name-status --oneline
---
c08099d add hello.txt to git rep
A hello.txt
723687a add c.txt
A c.txt
1a29bde 新增了a.txt和b.txt文件
A a.txt
A b.txt
--follow
- 不带follow参数的情况下,git把名为a.txt的文件全部提交记录找出来
- 带follow参数的情况下,git会把当前以及重命名前的文件提交记录找出来
二者的差异,就像是,一个『浮于表面』,只认历史上与当前文件名匹配的提交记录,一个认准文件的『真身』,不管当前文件曾经披着什么的『皮』,始终追溯它的真身。
demo-follow
git init
echo ‘1st line —in a’ >> a.txt
git add a.txt && git commit -m ‘add line for a.txt’
echo ‘2nd line —in a’ >> a.txt
git add a.txt && git commit -m ‘add 1 line for a.txt’
echo ‘line 1 —in b’ >> b.txt
git add b.txt && git commit -m ‘add line for b.txt’
echo ‘line 2 —in b’ >> b.txt
git add b.txt && git commit -m ‘add line for b.txt’
git rm a.txt && git commit -m ‘remove a.txt’
git mv b.txt a.txt && git commit -m ‘rename b.txt to a.txt’
---文件状态变更
a.txt => a.txt b.txt => b.txt => a.txt
git log -p a.txt
git log -p --follow a.txt