30-git-25-log

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:使用其他格式显示历史提交信息。可用的选项包括onelineshortfullfullerformat(用来定义自己的格式)。

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

参考

https://x-front-team.github.io/