Git5.Git查看提交历史&版本回退

查看提交历史

你不断对文件进行修改,而后不断提交修改到版本库里,就比如玩RPG游戏时,每经过一关就会自动把游戏状态存盘,若是某一关没过去,你还能够选择读取前一关的状态。有些时候,在打Boss以前,你会手动存盘,以便万一打Boss失败了,能够从最近的地方从新开始。Git也是同样,每当你以为文件修改到必定程度的时候,就能够“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还能够从最近的一个commit恢复,而后继续工做,而不是把几个月的工做成果所有丢失。在Git中,咱们用git log命令查看git

$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file
默认不用任何参数的话,git log 会按提交时间列出全部的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每一个提交的 SHA-1 校验和、做者的名字和电子邮件地址、提交时间以及提交说明。

一个经常使用的选项是-p用来显示每次提交的内容差别。 你也能够加上-2来仅显示最近两次提交:github

$ git log -p -2
commit a839149804f6ccf0f727fd2e0e6431be2b0933e4
Author: BadBoy <613163851@qq.com>
Date:   Sat Sep 10 23:02:13 2016 +0800


    append GPL


diff --git a/readme.txt b/readme.txt
index 013b5bc..99e0e11 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
 Git is a distributed version control system.
-Git is free software.
\ No newline at end of file
+Git is free software distributed under the GPL.
\ No newline at end of file


commit 3482d7511e91dfc0b2a8d3d928a2f5a13cb53dbe
Author: BadBoy <613163851@qq.com>
Date:   Sat Sep 10 23:00:58 2016 +0800


    add distributed

该选项除了显示基本信息以外,还在附带了每次 commit 的变化。 当进行代码审查,或者快速浏览某个快照提交的 commit 所带来的变化的时候,这个参数就很是有用了。 你也能够为git log 附带一系列的总结性选项。 好比说,若是你想看到每次提交的简略的统计信息,你能够使用 --stat 选项:
$ git log --stat -2
commit a839149804f6ccf0f727fd2e0e6431be2b0933e4
Author: BadBoy <613163851@qq.com>
Date:   Sat Sep 10 23:02:13 2016 +0800


    append GPL


 readme.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


commit 3482d7511e91dfc0b2a8d3d928a2f5a13cb53dbe
Author: BadBoy <613163851@qq.com>
Date:   Sat Sep 10 23:00:58 2016 +0800


    add distributed


 readme.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

正如你所看到的, 在每次提交的下面列出额全部被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。另一个经常使用的选项是--pretty。 这个选项能够指定使用不一样于默认格式的方式展现提交历史。 这个选项有一些内建的子选项供你使用。 好比用 oneline 将每一个提交放在一行显示,查看的提交数很大时很是有用。 另外还有 shortfull 和 fuller 能够用,展现的信息或多或少有些不一样,请本身动手实践一下看看效果如何。
$ git log --pretty=oneline
a839149804f6ccf0f727fd2e0e6431be2b0933e4 append GPL
3482d7511e91dfc0b2a8d3d928a2f5a13cb53dbe add distributed
aee8243cb9369c4829989fb945368eadbc72e108 wrote a readme file

但最有意思的是 format,能够定制要显示的记录格式。 这样的输出对后期提取分析格外有用 — 由于你知道输出的格式不会随着Git的更新而发生改变:
app

$ git log --pretty=format:"%h - %an, %ar : %s"
a839149 - BadBoy, 40 minutes ago : append GPL
3482d75 - BadBoy, 41 minutes ago : add distributed
aee8243 - BadBoy, 43 minutes ago : wrote a readme file
git log --pretty=format  经常使用的选项

选项 说明

%Hui

提交对象(commit)的完整哈希字串spa

%h3d

提交对象的简短哈希字串code

%Torm

树对象(tree)的完整哈希字串xml

%t对象

树对象的简短哈希字串

%P

父对象(parent)的完整哈希字串

%p

父对象的简短哈希字串

%an

做者(author)的名字

%ae

做者的电子邮件地址

%ad

做者修订日期(能够用 --date= 选项定制格式)

%ar

做者修订日期,按多久之前的方式显示

%cn

提交者(committer)的名字

%ce

提交者的电子邮件地址

%cd

提交日期

%cr

提交日期,按多久之前的方式显示

%s

提交说明

你必定奇怪  做者  和  提交者  之间究竟有何差异, 其实做者指的是实际做出修改的人,提交者指的是最后将此工做成果提交到仓库的人。 因此,当你为某个项目发布补丁,而后某个核心成员将你的补丁并入项目时,你就是做者,而那个核心成员就是提交者。 当 oneline 或 format 与另外一个  log  选项  --graph  结合使用时尤为有用。 这个选项添加了一些ASCII字符串来形象地展现你的分支、合并历史:
 
 git log --prettyformat: --graph









$="%h %s"* 2d3acf9 ignore errors from SIGCHLD on trap*  5e3ee11 Merge branch 'master' of git://github.com/dustin/grit|\| * 420eac9 Added a method for getting the current branch.* | 30e367c timeout code and tests* | 5a09431 add timeout protection to grit* | e1193f8 support for heads with slashes in them|/* d6016bc require time for xmlschema*  11d191e Merge branch 'defunkt' into local
git log  的经常使用选项
选项 说明

-p

按补丁格式显示每一个更新之间的差别。

--stat

显示每次更新的文件修改统计信息。

--shortstat

只显示 --stat 中最后的行数修改添加移除统计。

--name-only

仅在提交信息后显示已修改的文件清单。

--name-status

显示新增、修改、删除的文件清单。

--abbrev-commit

仅显示 SHA-1 的前几个字符,而非全部的 40 个字符。

--relative-date

使用较短的相对时间显示(好比,“2 weeks ago”)。

--graph

显示 ASCII 图形表示的分支合并历史。

--pretty

使用其余格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。

git log  输出的选项

选项 说明

-(n)

仅显示最近的 n 条提交

--since--after

仅显示指定时间以后的提交。

--until--before

仅显示指定时间以前的提交。

--author

仅显示指定做者相关的提交。

--committer

仅显示指定提交者相关的提交。

--grep

仅显示含指定关键字的提交

-S

仅显示添加或移除了某个关键字的提交