Git 查看提交历史


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

针对我们前一章节的操作,使用 git log 命令列出历史提交记录如下:

  1. $ git log
  2. commit 88afe0e02adcdfea6844bb627de97da21eb10af1
  3. Merge: 14b4dca d7e7346
  4. Author: shouce.ren <w3c@shouce.ren>
  5. Date: Sun Mar 1 15:03:42 2015 +0800
  6.  
  7. Merge branch 'change_site'
  8. Conflicts:
  9. test.txt
  10.  
  11. commit 14b4dcadbdc847207651d5a9fae0d315057f346e
  12. Author: shouce.ren <w3c@shouce.ren>
  13. Date: Sun Mar 1 14:53:15 2015 +0800
  14.  
  15. 新增加一行
  16.  
  17. commit d7e734640da06055e107eaf29cf350b3f1de1c2c
  18. Author: shouce.ren <w3c@shouce.ren>
  19. Date: Sun Mar 1 14:48:57 2015 +0800
  20.  
  21. changed the site
  22.  
  23. commit 556f0a0637978097b82287ac665a717623b21f3f
  24. Author: shouce.ren <w3c@shouce.ren>
  25. Date: Sun Mar 1 14:40:34 2015 +0800
  26.  
  27. removed test2.txt

我们可以用 --oneline 选项来查看历史记录的简洁的版本。

  1. $ git log --oneline
  2. 88afe0e Merge branch 'change_site'
  3. 14b4dca 新增加一行
  4. d7e7346 changed the site
  5. 556f0a0 removed test2.txt
  6. 2e082b7 add test2.txt
  7. 048598f add test.txt
  8. 85fc7e7 test comment from shouce.ren

这告诉我们的是,此项目的开发历史。

我们还可以用 --graph 选项,查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项:

  1. $ git log --oneline --graph
  2. * 88afe0e Merge branch 'change_site'
  3. |\
  4. | * d7e7346 changed the site
  5. * | 14b4dca 新增加一行
  6. |/
  7. * 556f0a0 removed test2.txt
  8. * 2e082b7 add test2.txt
  9. * 048598f add test.txt
  10. * 85fc7e7 test comment from shouce.ren

现在我们可以更清楚明了地看到何时工作分叉、又何时归并。

你也可以用 '--reverse'参数来逆向显示所有日志。

  1. $ git log --reverse --oneline
  2. 85fc7e7 test comment from shouce.ren
  3. 048598f add test.txt
  4. 2e082b7 add test2.txt
  5. 556f0a0 removed test2.txt
  6. d7e7346 changed the site
  7. 14b4dca 新增加一行
  8. 88afe0e Merge branch 'change_site'

如果只想查找指定用户的提交日志可以使用命令:git log --author , 例如,比方说我们要找 Git 源码中 Linus 提交的部分:

  1. $ git log --author=Linus --oneline -5
  2. 81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory
  3. 3bb7256 make "index-pack" a built-in
  4. 377d027 make "git pack-redundant" a built-in
  5. b532581 make "git unpack-file" a built-in
  6. 112dd51 make "mktag" a built-in

如果你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。

例如,如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(我还用了 --no-merges 选项以隐藏合并提交):

  1. $ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
  2. 5469e2d Git 1.7.1-rc2
  3. d43427d Documentation/remote-helpers: Fix typos and improve language
  4. 272a36b Fixup: Second argument may be any arbitrary string
  5. b6c8d2d Documentation/remote-helpers: Add invocation section
  6. 5ce4f4e Documentation/urls: Rewrite to accomodate transport::address
  7. 00b84e9 Documentation/remote-helpers: Rewrite description
  8. 03aa87e Documentation: Describe other situations where -z affects git diff
  9. 77bc694 rebase-interactive: silence warning when no commits rewritten
  10. 636db2c t3301: add tests to use --format="%N"

更多 git log 命令可查看:http://git-scm.com/docs/git-log