利用git 找到应该对问题代码负责的人--代码定责
场景
有时候突然发现 某部分代码存在明显的问题,代码作者的态度需要调整。 或者发现某些代码存在特意留下的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 信息 和日期,点开可以看到差别。

利用git 找到应该对问题代码负责的人--代码定责的更多相关文章
- Git学习:利用Git和TortoiseGit把代码传输到网络服务器
版本控制这块,一直用SVN.感觉挺好用,比VSS要好用些.不过,近期在网上,又谈到时下很流行的Git.就想看看Git到底是何方神圣.趁着五一在家无事,就静下心来,简单研究一下. 当下,网络上提供的基于 ...
- FastAdmin 是如何利用 Git 管理插件代码的?
FastAdmin 是如何利用 Git 管理插件代码的? 由于 FastAdmin 的插件很多,如果每一个插件用一个项目来管理,可以倒是可以,但是项目还多了. 但是如果使用文件夹在同一级的的方式又不方 ...
- 利用Git钩子实现代码发布
目录 1.什么是git钩子 2.安装一个钩子 3.常用的钩子脚本类型 3.1 客户端钩子 3.1.1 pre-commit 3.1.2 prepare-commit-msg 3.1.3 commit- ...
- AndroidStudio中利用git下载github或者git.oschina的代码时报错:repository test has failed解决方法
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing AndroidS ...
- git使用方法----如何利用git管理代码?如何使用git将代码传到github中去
## 在文件夹中打开 git here; 1.git init ===初始化一个仓库(这个仓库会存放,git对我们代码进行备份的文件)2.配置个人信息 -- --在git中设置当前使用的用户是==( ...
- 如何利用Git生成pitch和打pitch
利用Git生成和应用patch 在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情. 什么是patch?简单来讲,patch中存储的是你 ...
- 利用Git进行团队协作
前言: 这里简单介绍一下Git的历史. 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了 ...
- Visual Studio C# 利用git和github协同开发时产生冲突的解决办
Visual Studio C# 利用git和Github协同开发时产生冲突的解决办法 前言:在前两天的助教作业中,发现了自己没有办法解决在用vs开发C#的窗体项目的过程中产生的冲突问题,在查阅了资料 ...
- 利用git+hugo+markdown 搭建一个静态网站
利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...
随机推荐
- Spring Boot:整合Shiro权限框架
综合概述 Shiro是Apache旗下的一个开源项目,它是一个非常易用的安全框架,提供了包括认证.授权.加密.会话管理等功能,与Spring Security一样属基于权限的安全框架,但是与Sprin ...
- kubernetes实战篇之通过api-server访问dashboard
系列目录 前面一节我们介绍了如何使用kube-proxy搭建代理访问dashboard,这样做缺点非常明显,第一可以通过http访问,第二是这种方式要启动一个后台进程,如果进程关闭了则不能够访问了,还 ...
- spring 5.x 系列第9篇 —— 整合mongodb (xml配置方式)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 配置文件位于resources下,项目以单 ...
- Java:synchronized关键字引出的多种锁
前言 Java 中的 synchronized关键字可以在多线程环境下用来作为线程安全的同步锁.本文不讨论 synchronized 的具体使用,而是研究下synchronized底层的锁机制,以及这 ...
- CentOS下查看机器配置
1.查看系统位数.内核版本 [root@localhost ~]# uname -a Linux localhost.localdomain 3.10.0-693.11.6.el7.x86_64 #1 ...
- python的is与==的区别
is is比较的是两个变量的地址值,如果地址值正确,则返回True,否则返回False,实例如下: 如图所示,a,b列表的数值相等,但地址是不相等的,所以返回True,与值无关 == ==比较的是两个 ...
- 2. 2.1查找命令——linux基础增强,Linux命令学习
2.1.查找命令 grep命令 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并 把匹配的行打印出来. 格式: grep [option] pattern [file] 可使用 ...
- 跟我学SpringCloud | 第十四篇:Spring Cloud Gateway高级应用
SpringCloud系列教程 | 第十四篇:Spring Cloud Gateway高级应用 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 ...
- 从无到有构建vue实战项目(五)
八.错误总结(一) webpack打包项目识别子组件路径问题 之所以出现了这样的问题是因为在webpack打包项目时,未将此处的子组件路径正确识别: 将此处的carousel改为carousel.vu ...
- 控制反转&依赖注入
IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.这是什么 ...