Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

119.5. git log 日志

		
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ai) %C(bold blue)<%an>%Creset' --abbrev-commit
		
	

119.5.1. hash-object

使用git命令计算文件的 sha-1 值

		
neo@MacBook-Pro ~ % echo 'test content' | git hash-object --stdin
d670460b4b4aece5915caf5c68d12f560a9fe3e4		
		
		

119.5.2. 查看文件历史记录

			
neo@MacBook-Pro-Neo ~/workspace/devops % git log -- setup.py			
			
		

diff 风格

			
neo@MacBook-Pro-Neo ~/workspace/devops % git log -p -- setup.py

commit abe282e68ad81e0e72cb8c700ba5c4db87c647a4
Author: neo <netkiller@msn.com>
Date:   Thu Sep 30 14:07:02 2021 +0800

    voice

diff --git a/setup.py b/setup.py
deleted file mode 100644
index 08f9d08..0000000
--- a/setup.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import os,sys
-from setuptools import setup,find_packages
-sys.path.insert(0, os.path.abspath('lib'))
-from netkiller import __version__, __author__
-
-with open("README.md", "r") as fh:
-  long_description = fh.read()
-
-setup(
-       name="netkiller-devops",
-       version="0.2.4",			
			
		

oneline 风格

			
neo@MacBook-Pro-Neo ~/workspace/devops % git log --pretty=oneline -- setup.py
abe282e68ad81e0e72cb8c700ba5c4db87c647a4 voice
fda886b0ae1526020c366cea2b747b3ceda18ff6 语音通知
cb2ca23a81b2384b79d7b32bb2e84782bb80edaf 企业微信通知
ac8e573123142a2856d44d13307dd4c46b134ceb fixed logging bug
1c609b9242c8f404ec4bba207dd8c9d836e591d4 docker 增加日志功能
			
		

119.5.3. 目录历史记录

		
git log --pretty=oneline -- .		
		
		
		
git log --oneline -- path/to/folder
git log --name-status -- path/to/folder		
git log --pretty=oneline -- path/to/folder
git log -p -- path/to/folder		
		
		

119.5.4. 一行显示 --oneline

			
Neo-iMac:test.netkiller.cn neo$ git log --name-status
commit 120f1bb6ff391c6b9b24899804f0292370873485 (HEAD -> main)
Author: 陈景峰 <neo@netkiller.cn>
Date:   Thu Dec 2 04:10:16 2021 +0000

    Initial commit

A       README.md
Neo-iMac:test.netkiller.cn neo$ git log --name-status --oneline
120f1bb (HEAD -> main) Initial commit
A       README.md			
			
		

			
Neo-iMac:www.netkiller.cn neo$ git log --name-status --oneline --graph
* 7ca7fb7 (HEAD -> main, origin/main, origin/HEAD) sign
| M     README.md
* ba9a9a6 更新.gitlab-ci.yml文件
| M     .gitlab-ci.yml
* 8af932e 更新.gitlab-ci.yml文件
| M     .gitlab-ci.yml
* 6fe467b Update app.js
| M     app.js
* a019da0 更新.gitlab-ci.yml文件
| M     .gitlab-ci.yml
* 65afb8b 更新.gitlab-ci.yml文件
| M     .gitlab-ci.yml
* 061c78d 更新.gitlab-ci.yml文件
| A     .gitlab-ci.yml
* 149daf5 Add new file
| A     app.js
* e927196 更新README.md
  A     README.md			
			
		

119.5.5. 格式化

格式参数

		
%H: 标准长度 commit hash
%h: 缩短的 commit hash
%T: tree hash
%t: 缩短的 tree hash
%P: parent hashes
%p: 缩短的 parent hashes
%an: 作者名字
%aN: mailmap的作者名字 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
%ae: 作者邮箱
%aE: 作者邮箱 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
%ad: 日期 (--date= 制定的格式)
%aD: 日期, RFC2822格式
%ar: 日期, 相对格式(1 day ago)
%at: 日期, UNIX timestamp
%ai: 日期, ISO 8601 格式
%cn: 提交者名字
%cN: 提交者名字 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
%ce: 提交者 email
%cE: 提交者 email (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
%cd: 提交日期 (--date= 制定的格式)
%cD: 提交日期, RFC2822格式
%cr: 提交日期, 相对格式(1 day ago)
%ct: 提交日期, UNIX timestamp
%ci: 提交日期, ISO 8601 格式
%d: ref名称
%e: encoding
%s: commit信息标题
%f: sanitized subject line, suitable for a filename
%b: commit信息内容
%N: commit notes
%gD: reflog selector, e.g., refs/stash@{1}
%gd: shortened reflog selector, e.g., stash@{1}
%gs: reflog subject
%Cred: 切换到红色
%Cgreen: 切换到绿色
%Cblue: 切换到蓝色
%Creset: 重设颜色
%C(...): 制定颜色, as described in color.branch.* config option
%m: left, right or boundary mark
%n: 换行
%%: a raw %
%x00: print a byte from a hex code
%w([[,[,]]]): switch line wrapping, like the -w option of git-shortlog(1)		
		
		

命令演示

		
git log --since="2023-02-11" --no-merges --pretty=format:"%h %an %ai %s"		
		
		

119.5.6. 过滤

		
neo@Neo-Mac-mini-M4 ~/G/python (master)> git log --diff-filter=D --summary | grep delete
            deleted:    "Netkiller Python \346\211\213\346\234\255.docx"
            deleted:    crawler/__pycache__/requests.cpython-39.pyc
 delete mode 100644 "Netkiller Python \346\211\213\346\234\255.docx"
 delete mode 100644 crawler/__pycache__/requests.cpython-39.pyc
 delete mode 100644 crawler/requests-get.py
 delete mode 100644 intesting/99.py
 delete mode 100644 intesting/love.py
 delete mode 100644 intesting/test.py
 delete mode 100644 netkiller-2021-02-16.log
 delete mode 100644 new.docx
 delete mode 100644 numpy/test.py
 delete mode 100644 pandas/demo/html.py
 delete mode 100644 pandas/method/date.py
 delete mode 100644 pyaudio/client.py
 delete mode 100644 pyaudio/server.py
 delete mode 100644 single.py
 delete mode 100644 test.xlsx
 delete mode 100644 type/str.py
            deleted:    pandas/demo/doc.html
 delete mode 100644 pandas/demo/doc.html
 delete mode 100644 "pandas/\345\233\242\350\264\255.xlsx"
 delete mode 100644 netkiller.pid
 delete mode 100644 pandas/dataframe/demo1.py
 delete mode 100644 terminal/progress-demo.py		
		
		

119.5.7. all

		
neo@Neo-Mac-mini-M4 ~/G/python (master) [SIGINT]> git log --all -- pandas/demo/html.py
commit 7af7df5fce170692b6ad35e0c8e52300c4e96bc0 (HEAD -> master, origin/master, origin/HEAD)
Author: Neo Chan <netkiller@msn.com>
Date:   Tue Dec 3 00:37:45 2024 +0800

            deleted:    "Netkiller Python \346\211\213\346\234\255.docx"
            deleted:    crawler/__pycache__/requests.cpython-39.pyc

commit efb002d74f6fd05cc2fdaf1111b431699d4562bf
Author: neo <netkiller@msn.com>
Date:   Thu Apr 4 23:45:54 2024 +0800

            modified:   pandas/demo/html.py

commit bc23e7890c79eac5a79b7d49cb58918dcd22ab40
Author: neo <netkiller@msn.com>
Date:   Thu Mar 14 17:04:01 2024 +0800

            modified:   .gitignore
            modified:   .vscode/settings.json
            modified:   pandas/demo/html.py

commit 16abfa18f09533884e8594d407a767725d75f455
Author: neo <netkiller@msn.com>
Date:   Tue Dec 19 16:43:25 2023 +0800

            modified:   pandas/demo/html.py

commit 758edc1210100b64ea60c34f3f38589d670c3ccc
Author: neo <netkiller@msn.com>
Date:   Tue Sep 5 09:14:20 2023 +0800

            modified:   .vscode/settings.json
            modified:   pandas/demo/html.py

commit 631e5b5be42b392f92b90505213fca9db52415d9
Author: neo <netkiller@msn.com>
Date:   Sat May 27 16:09:39 2023 +0800

            deleted:    pandas/demo/doc.html
            modified:   pandas/demo/html.py		
		
		

119.5.8. full-history

		
neo@Neo-Mac-mini-M4 ~/G/python (master) [1]> git log --all --full-history -- pandas/demo/html.py
commit 7af7df5fce170692b6ad35e0c8e52300c4e96bc0 (HEAD -> master, origin/master, origin/HEAD)
Author: Neo Chan <netkiller@msn.com>
Date:   Tue Dec 3 00:37:45 2024 +0800

            deleted:    "Netkiller Python \346\211\213\346\234\255.docx"
            deleted:    crawler/__pycache__/requests.cpython-39.pyc

commit efb002d74f6fd05cc2fdaf1111b431699d4562bf
Author: neo <netkiller@msn.com>
Date:   Thu Apr 4 23:45:54 2024 +0800

            modified:   pandas/demo/html.py

commit bc23e7890c79eac5a79b7d49cb58918dcd22ab40
Author: neo <netkiller@msn.com>
Date:   Thu Mar 14 17:04:01 2024 +0800

            modified:   .gitignore
            modified:   .vscode/settings.json
            modified:   pandas/demo/html.py

commit 16abfa18f09533884e8594d407a767725d75f455
Author: neo <netkiller@msn.com>
Date:   Tue Dec 19 16:43:25 2023 +0800

            modified:   pandas/demo/html.py

commit 758edc1210100b64ea60c34f3f38589d670c3ccc
Author: neo <netkiller@msn.com>
Date:   Tue Sep 5 09:14:20 2023 +0800

            modified:   .vscode/settings.json
            modified:   pandas/demo/html.py

commit 631e5b5be42b392f92b90505213fca9db52415d9
Author: neo <netkiller@msn.com>
Date:   Sat May 27 16:09:39 2023 +0800

            deleted:    pandas/demo/doc.html
            modified:   pandas/demo/html.py		
		
		

119.5.9. reflog

reflog 类似我们软件中的 Undo/Redo ,就像使用 CMD+Z / CMD + SHIFT +Z 一样进行版本的切换和回滚。reflog 日志是保存在本地的,并不会 push 到远程,这就是他与 git log 的区别。

git reflog 与 git log的区别,git log 可以显示所有提交过的版本信息,但不包括已经被删除的 commit 记录和 reset 的操作

git reflog 可以是显示所有的操作记录,包括提交,回退的操作。一般用来找出操作记录中的版本号,进行回退,常用于恢复本地的错误操作。

git reflog 用法

		
Neo-iMac:test.netkiller.cn neo$ git reflog
120f1bb (HEAD -> main) HEAD@{0}: reset: moving to 120f1bb
9fcccf0 HEAD@{1}: commit: add tmp string
de5ca5d (origin/main, origin/HEAD) HEAD@{2}: reset: moving to HEAD
de5ca5d (origin/main, origin/HEAD) HEAD@{3}: pull: Fast-forward
120f1bb (HEAD -> main) HEAD@{4}: clone: from 192.168.30.5:netkiller.cn/test.netkiller.cn.git
		
		

回滚到 120f1bb

		
Neo-iMac:test.netkiller.cn neo$ git reset --hard 120f1bb
HEAD is now at 120f1bb Initial commit