代码更新上线前,需要进行代码评审和走查,对于git,主要是查看现行版本和线上版本代码的差别,即使用git diff。
首先,还是查看程序版本,git log
[plain] view plaincopy
- [[email protected] my]$ git log
- commit d87f3ea30f8e1a31ef26523c43d17237e4b7285c
- Merge: bf468f2 2e47641
- Author: lixinglei <[email protected]>
- Date: Tue Jul 16 21:12:58 2013 +0800
- Merge branch ‘master‘ of 127.0.0.1:my
- commit bf468f2aea582956e98d91af6eeea27da9812ba9
- Author: lixinglei <[email protected]>
- Date: Tue Jul 16 21:08:31 2013 +0800
- 二号需求
- commit 2e476412c34a63b213b735e5a6d90cd05b014c33
- Author: lixinglei <[email protected]>
- Date: Tue Jul 16 20:31:39 2013 +0800
- 一号需求——bug修复
- commit c0f28a2ec490236caa13dec0e8ea826583b49b7a
- Author: lixinglei <[email protected]>
- Date: Fri Jul 16 19:41:07 2013 +0800
- 一号需求
- commit c34d6a8216a0aba5194a9b8dd2f41f7ca41499a8
- Merge: 7f8fd44 32f74cd
- Author: lixinglei <[email protected]>
- Date: Tue Jul 16 16:30:05 2013 +0800
- Merge 127.0.0.1:my
- commit 32f74cd586788caf66ac1ae15281aedfb23d71db
- Author: lixinglei <[email protected]>
- Date: Tue Jul 16 16:29:05 2013 +0800
- bug1001
- commit 7f8fd44d9404859608515c7d0f389890bcc4a529
- Author: lixinglei <[email protected]>
- Date: Tue Jul 16 16:24:12 2013 +0800
- bug2002
如果要查看版本之间的差异,通过git diff就可以了,这里又有一些区别,关于merge的版本和非merge的版本的。如果两个版本之间是不存在分支,也就是没有经过merge的,比如在这一段时间只有一个人在一个分支上开发,然后提交更新版本,这种情况下,两个版本之间直接通过git diff 版本号就可以查看差别了。而如果是多个人同时在提交,或者一个人开了不同的分支,在提交,则后提交的在git pull之后,自动进行过merge操作,即将这段时间其他分支上(可能是不同的人提交的,也可能是同一个人开不同的分支提交的)的代码进行合并,这样在查看版本区别的时候,需要区分来看。
例子中的版本中,对于有merge的情况,如:
要查看bug1001改变的内容使用git diff "bug1001对应版本号" "merge后的版本号",即:
git diff 32f74cd586788caf66ac1ae15281aedfb23d71db c34d6a8216a0aba5194a9b8dd2f41f7ca41499a8
查看bug2002的改变内容则使用git diff "bug1002对应版本号" "merge后的版本号",即:
git diff 7f8fd44d9404859608515c7d0f389890bcc4a529 c34d6a8216a0aba5194a9b8dd2f41f7ca41499a8
对于没有merge的情况,如:
要查看“一号需求bug修复”的内容,则由于“一号需求”和“一号需求bug修复”之间没有merge,即同一段时间内同一分支内提交的内容,则直接对比两个版本之间的差别即可,即:
git diff c0f28a2ec490236caa13dec0e8ea826583b49b7a 2e476412c34a63b213b735e5a6d90cd05b014c33
对于以上情况没有遵守的,会出现如下情况,如果是有分支合并的情况要查看版本差别,如查看bug1001的变化,而直接使用了连续两个版本的差别,即:
git diff 7f8fd44d9404859608515c7d0f389890bcc4a529 32f74cd586788caf66ac1ae15281aedfb23d71db
则会出现,对于bug1001提交的内容会正确展示,同时会将bug1002提交的部分以反向的方式展示。即如果是bug1002增加的代码,这里会显示为"-",对于bug1002删除的代码,则又会展示出"+"。看起来相当诡异...!git 的版本号不是很友好,乱糟糟的一团,不过基本不影响正常使用,只是不太容易描述,这也要求版本提示信息一定要认真填写,不然真的无从描述哪个版本了。