追溯版本历史
在项目中一个仓库通常会有非常多次的add、commit过程,这些过程都会被记录下来作为追溯的证据。在前面的小节中,笔者已经提到了git log指令,通过这个指令Git会列出所有的提交记录,例如经过前面的操作再使用git log指令,显示如下所示。
- commit 0fb569c9fda8b01d3f480945bc95278c89428f0d
- Author: 徐宜生 <xuyisheng@hujiang.com>
- Date: Sat Dec 12 20:32:12 2015 +0800
- modify README
- commit ce8e133421f53f99f38bf7341eb985da8c168c8f
- Author: 徐宜生 <xuyisheng@hujiang.com>
- Date: Sat Dec 12 18:15:37 2015 +0800
- add README
- commit 6c8ebf02a1327be98634b34d755b87a5d81885fb
- Author: 徐宜生 <xuyisheng@hujiang.com>
- Date: Sat Dec 12 18:11:25 2015 +0800
- init commit
- (END)
这个Git代码仓库已经发生了3次代码提交。每条记录都对应一个commit id。commit id是一个40位的16进制的SHA-1 hash code用来唯一标记一个commit。
同时,我们也可以使用gitk命令查看图形化的Log记录,如图2.3所示。
如图2.3所示的gitk指令,与命令行中的记录本质上是一样的,只不过gitk展示的信息更加丰富。Git会自动将commit串成一条时间线,每个点就代表一个commit。点击这些点,就可以看见相应的修改信息。
图2.3 gitk界面
通过git log的参数设置,可以得到非常好的Log展现形式,例如笔者在前面的文章中提到的设置,如下所示。
- git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
虽然参数非常多,但是通过设置别名的方式,可以简化这个过程并显示非常清晰的Log。这里笔者只是举一个例子,大家可以根据自己的喜好来设置自己的Log,在终端中执行git log—help指令就可以获取Log指令的详细参数,尝试不同的指令参数是了解这些命令的最好方式。
除了git log指令以外,开发者还可以通过git blame指令追溯一个指定文件的历史修改记录,显示信息如图2.4所示。
- ➜ GradleTest git:(master) ✗ git blame app/build.gradle
图2.4 git blame
在Android Studio中,同样可以找到类似的功能。打开任意一个修改文件,在代码行数的区域内,单击鼠标右键,选择Annotate选项,如图2.5所示。
图2.5 Annotate
通过这种方式,同样可以找到该文件每一行代码的历史操作人。
