git查看提交/工作日志/

来源:互联网 发布:淘宝违禁词在线查询 编辑:程序博客网 时间:2024/06/05 03:08

1.git log --pretty=oneline

显示简写的SHA-1

$ git log --abbrev-commit --pretty=oneline
ca82a6d changed the verison number
085bb3b removed unnecessary test code
a11bef0 first commit


2.分支引用

指明一次提交的最直接的方法要求有一个指向它的分支引用。这样,你就可以在任何需要
一个提交对象或者 SHA-1 值的 Git 命令中使用该分支名称了。如果你想要显示一个分支的
最后一次提交的对象,例如假设 topic1 分支指向 ca82a6d,那么下面的命令是等价的:

$ git show ca82a6dff817ec66f44342007202690a93763949$ git show topic1

如果你想知道某个分支指向哪个特定的 SHA

$ git rev-parse topic1ca82a6dff817ec66f44342007202690a93763949

3.查看本地工作日志

git log是查看提交日志,而reflog是你clone下来后,你所做动作的日志。

 

$ git reflog734713b... HEAD@{0}: commit: fixed refs handling, added gc auto, updatedd921970... HEAD@{1}: merge phedders/rdocs: Merge made by recursive.1c002dd... HEAD@{2}: commit: added some blame and merge stuff1c36188... HEAD@{3}: rebase -i (squash): updating HEAD95df984... HEAD@{4}: commit: # This is a combination of two commits.1c36188... HEAD@{5}: rebase -i (squash): updating HEAD7e05da5... HEAD@{6}: rebase -i (pick): updating HEAD

如果你想查看仓库中 HEAD 在五次前的值,你可以使用引用日志的输出中的 @n 引用:
$ git show HEAD@{5}

你也可以使用这个语法来查看一定时间前分支指向哪里。例如,想看你的 master 分支昨天在哪,你可以输入
$ git show master@{yesterday}

它就会显示昨天分支的顶端在哪。这项技术只对还在你引用日志里的数据有用,所以不能用来查看比几个月前还早的提交。
想要看类似于 git log 输出格式的引用日志信息,你可以运行 git log -g:
$ git log -g mastercommit 734713bc047d87bf7eac9674765ae793478c50d3Reflog: master@{0} (Scott Chacon <schacon@gmail.com>)Reflog message: commit: fixed refs handling, added gc auto, updatedAuthor: Scott Chacon <schacon@gmail.com>Date:Fri Jan 2 18:32:33 2009 -0800fixed refs handling, added gc auto, updated testscommit d921970aadf03b3cf0e71becdaab3147ba71cdefReflog: master@{1} (Scott Chacon <schacon@gmail.com>)Reflog message: merge phedders/rdocs: Merge made by recursive.Author: Scott Chacon <schacon@gmail.com>Date:Thu Dec 11 15:08:43 2008 -0800Merge commit 'phedders/rdocs'

 需要注意的是,日志引用信息只存在于本地——这是一个你在仓库里做过什么的日志。其他人的仓库拷贝里的引用和你的相同;而你新克隆一个仓库的时候,引用日志是空的,因为
你在仓库里还没有操作。只有你克隆了一个项目至少两个月,git show HEAD@2.months.ago才会有用——如果你是五分钟前克隆的仓库,将不会有结果返回

4.通过祖先引用查看

 假设你的工程历史是这样的:

$ git log --pretty=format:'%h %s' --graph* 734713b fixed refs handling, added gc auto, updated tests*d921970 Merge commit 'phedders/rdocs'|\| * 35cfb2b Some rdoc changes* | 1c002dd added some blame and merge stuff|/* 1c36188 ignore *.gem* 9b29157 add open3_detach to gemspec file list

那么,想看上一次提交,你可以使用 HEADˆ,意思是“HEAD 的父提交”:

$ git show HEAD^commit d921970aadf03b3cf0e71becdaab3147ba71cdefMerge: 1c002dd... 35cfb2b...Author: Scott Chacon <schacon@gmail.com>Date:Thu Dec 11 15:08:43 2008 -0800Merge commit 'phedders/rdocs'

 另外一个指明祖先提交的方法是 ~。这也是指向第一父提交,所以 HEAD~ 和 HEADˆ 是等价的。当你指定数字的时候就明显不一样了。HEAD~2 是指“第一父提交的第一父提交”,
也就是“祖父提交”——它会根据你指定的次数检索第一父提交。例如,在上面列出的历史记录里面,HEAD~3 会是
$ git show HEAD~3commit 1c3618887afb5fbcbea25b7c013f4e2114448b8dAuthor: Tom Preston-Werner <tom@mojombo.com>Date:Fri Nov 7 13:47:59 2008 -0500ignore *.gem
也可以写成 HEADˆˆˆ,同样是第一父提交的第一父提交的第一父提交:

$ git show HEAD^^^commit 1c3618887afb5fbcbea25b7c013f4e2114448b8dAuthor: Tom Preston-Werner <tom@mojombo.com>Date:Fri Nov 7 13:47:59 2008 -0500ignore *.gem

5.查看分支差异

双点提交(..)

显示当前分支与远程分支相比,独有的差异

$ git log origin/master..HEAD

 你也可以留空语法中的一边来让 Git 来假定它是HEAD。例如,输入 git log origin/master.. 将得到和上面的例子一样的结果—— Git 使用 HEAD 来代替不存在的一边。




你想要查看你的试验分支上哪些没有被提交到主分支,那么你就可以使用 master..experiment来让 Git 显示这些提交的日志——这句话的意思是“所有可从experiment分支中获得而不能从master分支中获得的提交”。为了使例子简单明了,我使用了图标中提交对象的字母来代替真实日志的输出,所以会显示:

$ git log master..experiemntDC
另一方面,如果你想看相反的——所有在 master 而不在 experiment 中的分支——你可以交换分支的名字。experiment..master 显示所有可在 master 获得而在 experiment 中

不能的提交

$ git log experiment..masterFE

这是双点提交的例子,更复杂的多点提交例子需查看pro git 6.1节

如果你想查找所有从refA或refB包含的但是不被refC包含的提交,你可以输入下面中的一个

$ git log refA refB ^refC等价于 $ git log refA refB --not refC


三点提交(...)

这个可以指定被两个引用中的一个包含但又不被两者同时包含的分支。

$ git log master...experimentFEDC

这个再次给出你普通的log输出但是只显示那四次提交的信息,按照传统的提交日期排列。
这种情形下,log命令的一个常用参数是--left-right,它会显示每个提交到底处于哪一侧的分支。这使得数据更加有用。
$ git log --left-right master...experiment< F< E> D> C




原创粉丝点击