Git常用命令和场景(三)--版本差别查看

代码更新上线前,需要进行代码评审和走查,对于git,主要是查看现行版本和线上版本代码的差别,即使用git diff。
首先,还是查看程序版本,git log
[plain] view plaincopy
 
  1. [lixinglei@bogon my]$ git log  
  2. commit d87f3ea30f8e1a31ef26523c43d17237e4b7285c  
  3. Merge: bf468f2 2e47641  
  4. Author: lixinglei <lixinglei@zhangyue.com>  
  5. Date:   Tue Jul 16 21:12:58 2013 +0800  
  6.   
  7.     Merge branch 'master' of   127.0.0.1:my  
  8.   
  9. commit bf468f2aea582956e98d91af6eeea27da9812ba9  
  10. Author: lixinglei <lixinglei@zhangyue.com>  
  11. Date:   Tue Jul 16 21:08:31 2013 +0800  
  12.   
  13.     二号需求  
  14.   
  15. commit 2e476412c34a63b213b735e5a6d90cd05b014c33  
  16. Author: lixinglei <lixinglei@zhangyue.com>  
  17. Date:   Tue Jul 16 20:31:39 2013 +0800  
  18.   
  19.     一号需求——bug修复  
  20.   
  21. commit c0f28a2ec490236caa13dec0e8ea826583b49b7a  
  22. Author: lixinglei <lixinglei@zhangyue.com>  
  23. Date:   Fri Jul 16 19:41:07 2013 +0800  
  24.   
  25.     一号需求  
  26.   
  27. commit c34d6a8216a0aba5194a9b8dd2f41f7ca41499a8  
  28. Merge: 7f8fd44 32f74cd  
  29. Author: lixinglei <lixinglei@zhangyue.com>  
  30. Date:   Tue Jul 16 16:30:05 2013 +0800  
  31.   
  32.     Merge 127.0.0.1:my  
  33.   
  34. commit 32f74cd586788caf66ac1ae15281aedfb23d71db  
  35. Author: lixinglei <lixinglei@zhangyue.com>  
  36. Date:   Tue Jul 16 16:29:05 2013 +0800  
  37.   
  38.     bug1001  
  39.   
  40. commit 7f8fd44d9404859608515c7d0f389890bcc4a529  
  41. Author: lixinglei <lixinglei@zhangyue.com>  
  42. Date:   Tue Jul 16 16:24:12 2013 +0800  
  43.   
  44.     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 的版本号不是很友好,乱糟糟的一团,不过基本不影响正常使用,只是不太容易描述,这也要求版本提示信息一定要认真填写,不然真的无从描述哪个版本了。
posted @ 2015-03-30 15:11  shenming  阅读(843)  评论(0编辑  收藏  举报