2018-11-26 · Tools

Git 日志查看和中文乱码问题

在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log 命令查看。

下面列举几个比较常用的查看 git 日志的命令,也可以通过这篇文档 3 Git 基础 - 查看提交历史 进行学习。

git log

默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。看下面的输出:

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

git log --pretty=oneline

常用的 --pretty 选项,可以指定使用完全不同于默认格式的方式展示提交历史。比如用 oneline 将每个提交放在一行显示,这在提交数很大时非常有用。另外还有 shortfullfuller 可以用,展示的信息或多或少有些不同,请自己动手实践一下看看效果如何。

$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

git log --oneline

--oneline--pretty=oneline --abbrev-commit 的简化用法。
--abbrev-commit 代表仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。

git reflog

这是我最喜欢的日志查看方式,git reflog 命令可以对 git 误操作进行数据恢复。
如不小心用git commit --amend 当成 git commit 覆盖当前的commit,或不小心把当前的 commit 给搞没了(reset --hard)。 都可以通过 git reflog 恢复。

Git 记录每次修改 HEAD 的操作,git reflog/git log -g 可以查看所有的历史操作记录,然后通过git reset 命令进行恢复。

gitk

有时候图形化工具更容易展示历史提交的变化,随 Git 一同发布的 gitk 就是这样一种工具。它是用 Tcl/Tk 写成的,基本上相当于 git log 命令的可视化版本,凡是 git log 可以用的选项也都能用在 gitk 上。

gitk-demo

上半个窗口显示的是历次提交的分支祖先图谱,下半个窗口显示当前点选的提交对应的具体差异。

中文乱码问题

echo $LANG;
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8 
export LESSCHARSET=utf-8

由于我是在 Windows 系统中将 IntelliJ IDEA 修改为 Tools>Terminal 使用 Git\bin\bash.exe 所以在重新打开终端后需要重新执行 export LESSCHARSET=utf-8 ,为了一劳永逸可以修改 Git\etc\bash.bashrc 文件。

git config --global gui.encoding utf-8