场景

有时候突然发现 某部分代码存在明显的问题,代码作者的态度需要调整。 或者发现某些代码存在特意留下的bug或漏洞,代码作者需要出来担责。 这时候我们就需要找出来 需要为有问题代码承担责任的同事,或者前同事,不能让他挖个坑还能那么潇洒。

方法

1,git log fileName 查看 commit 信息 找相关的

主要是对比commit 信息

很简单,直接执行 git log fileName 命令即可查看文件相关commit 历史,大概如下边这样

commit 261cb112df61d728e62219ccf09c477242cdc11b
Author: liugjie <liusie@t2cld.net>
Date: Sat Dec 8 19:35:26 2018 +0800 add cofig file commit 6b6686e9cd13fcd5f6d7787dad1e55ef3bfef9bb
Author: mingbai <lngjie@t2cld.net>
Date: Fri Nov 16 20:38:11 2018 +0800 add nav,resume func

然后 用 git diff commi1,commit2 即可查看两个commit 之间的修改。

2,log -p 查看文件的修改历史,

此命令 主要是查看文件的修改细节

直接执行 log -p fileName , 即可查看某一个文件的修改历史。这个命令会 分commit 展示各个commit的修改,其结果大致如下:

commit 5c736956bcf1354a4ed892a424d48f621d1f19cc
Author: liushengjie <ligjie@xm.com>
Date: Tue Jun 11 17:27:12 2019 +0800 change test func , and fix some bug diff --git a/controllers/channel/save.go b/controllers/channel/save.go
index 2976913..209549a 100755
--- a/controllers/channel/save.go
+++ b/controllers/channel/save.go
@@ -26,7 +26,7 @@ func (p *Channel) save(ctx *xcontext.XContext) (result interface{}, code int, er
return nil, 400, errors.New(xbase.LogFatalChannel("secret name already exist ! "))
} - exist, err = model.CheckExistForCreateChannel(nsqUser.ClusterId, nsqUser.Topic.TopicName, nsqUser.ChannelName)
+ exist, err = model.CheckExistForCreateChannel(nsqUser.ClusterId, nsqUser.TopicId, nsqUser.ChannelName)
if err != nil {
return nil, 500, errors.New(xbase.LogFatalChannel("check channel exist err , ", err.Error()))
} commit 6aad0acde3b83a34bdc2b76a12fe0e9b8a692bdb
Author: ljie <liusie@xi.com>
Date: Mon Jun 10 21:42:23 2019 +0800 refactor table nsqUser,change relevant code diff --git a/controllers/channel/save.go b/controllers/channel/save.go
index 2abeeee..2976913 100755
--- a/controllers/channel/save.go
+++ b/controllers/channel/save.go
@@ -26,7 +26,7 @@ func (p *Channel) save(ctx *xcontext.XContext) (result interface{}, code int, er
return nil, 400, errors.New(xbase.LogFatalChannel("secret name already exist ! "))
} - exist, err = model.CheckExistForCreateChannel(nsqUser.ClusterName, nsqUser.TopicName, nsqUser.ChannelName)
+ exist, err = model.CheckExistForCreateChannel(nsqUser.ClusterId, nsqUser.Topic.TopicName, nsqUser.ChannelName)
if err != nil {
return nil, 500, errors.New(xbase.LogFatalChannel("check channel exist err , ", err.Error()))
}

3, git blame -L beginline,endline fileName

此命令,可以针对特定文件里的 某几行。

执行 git blame -L beginline,endline fileName 后,会仅显示 beginline 和 endline 之间的行相关 的修改历史commie,其结果大致如下:

fd208ce1 (liujie 2019-05-31 15:08:20 +0800 21)     beego.Router("/auth", &auth.Auth{}, "*:Query")
50c6539b (liujie 2019-05-28 20:31:05 +0800 22)
5c736956 (liushengjie 2019-06-11 17:27:12 +0800 23) beego.Router("/channel/delete/:topicName/:id", &channel.Channel{}, "*:Delete")
5c736956 (liujie 2019-06-11 17:27:12 +0800 24) beego.Router("/channel/query/:clusterId/:topicId", &channel.Channel{}, "*:Query")
(END)

然后git show 相应的commit id ,即可完整的变更历史。

4, 利用IDE里的git,界面化操作

这个背后的操作与1 是一样的,只不过界面化了

一些 IDE 会集成git明亮,对某一个文件 右键可能会有 git history 或者 类似的选项。展开以后一般会有 该文件的 commit 信息 和日期,点开可以看到差别。

最新文章

  1. nginx简易教程
  2. 怎样写一个webpack loader
  3. R语言获取数据类型信息的一些有用函数
  4. LoadRunner连接Genymotion
  5. Go目录
  6. 【转】博弈问题及SG函数(真的很经典)
  7. char类型与Unicode的编码
  8. 进程、线程、GDI+、XML、委托
  9. jQuery和DOM对象
  10. [程序安装包制作] Advanced Installer 备忘
  11. Android开发者的Anko使用指南(三)之资源
  12. Django--CRM
  13. 用js实现二维数组的旋转
  14. 23.HashMap
  15. POJ1860-Currency Exchange (正权回路)【Bellman-Ford】
  16. unity DoTween使用
  17. 通过putty进行端口映射并且启动jupyter notebook
  18. Android 集成高德地图
  19. Asp.net动态生成表单
  20. P2049 魔术棋子

热门文章

  1. screen命令使用简单说明
  2. Web前端——JavaScript练习
  3. 使用wireshark抓包分析-抓包实用技巧
  4. python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析
  5. Hadoop 学习之路(五)—— Hadoop集群环境搭建
  6. pybind11在Windows下的使用
  7. Ruby中的数值
  8. Salesforce Admin篇(一)Duplicate Management
  9. WordPress教程之如何入门WordPress
  10. 用jQuery做定位元素,做自动化测试你尝试过吗