场景

有时候突然发现 某部分代码存在明显的问题,代码作者的态度需要调整。 或者发现某些代码存在特意留下的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 找到应该对问题代码负责的人--代码定责的更多相关文章

  1. Git学习:利用Git和TortoiseGit把代码传输到网络服务器

    版本控制这块,一直用SVN.感觉挺好用,比VSS要好用些.不过,近期在网上,又谈到时下很流行的Git.就想看看Git到底是何方神圣.趁着五一在家无事,就静下心来,简单研究一下. 当下,网络上提供的基于 ...

  2. FastAdmin 是如何利用 Git 管理插件代码的?

    FastAdmin 是如何利用 Git 管理插件代码的? 由于 FastAdmin 的插件很多,如果每一个插件用一个项目来管理,可以倒是可以,但是项目还多了. 但是如果使用文件夹在同一级的的方式又不方 ...

  3. 利用Git钩子实现代码发布

    目录 1.什么是git钩子 2.安装一个钩子 3.常用的钩子脚本类型 3.1 客户端钩子 3.1.1 pre-commit 3.1.2 prepare-commit-msg 3.1.3 commit- ...

  4. AndroidStudio中利用git下载github或者git.oschina的代码时报错:repository test has failed解决方法

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing AndroidS ...

  5. git使用方法----如何利用git管理代码?如何使用git将代码传到github中去

    ##  在文件夹中打开 git here; 1.git init ===初始化一个仓库(这个仓库会存放,git对我们代码进行备份的文件)2.配置个人信息 -- --在git中设置当前使用的用户是==( ...

  6. 如何利用Git生成pitch和打pitch

    利用Git生成和应用patch  在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情. 什么是patch?简单来讲,patch中存储的是你 ...

  7. 利用Git进行团队协作

    前言: 这里简单介绍一下Git的历史. 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了 ...

  8. Visual Studio C# 利用git和github协同开发时产生冲突的解决办

    Visual Studio C# 利用git和Github协同开发时产生冲突的解决办法 前言:在前两天的助教作业中,发现了自己没有办法解决在用vs开发C#的窗体项目的过程中产生的冲突问题,在查阅了资料 ...

  9. 利用git+hugo+markdown 搭建一个静态网站

    利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...

随机推荐

  1. shell多线程(2)之基于管道实现并发

    在shell脚本里批量执行程序是比较常见的方式,如果程序很多,每个执行时间比较长,则顺序执行需要花费大量的时间. 此时并发就成为我们考虑的方向. 上篇<shell多线程>中我们已经简单实现 ...

  2. 机器学习经典算法之KNN

    一.前言 KNN 的英文叫 K-Nearest Neighbor,应该算是数据挖掘算法中最简单的一种. 先用一个例子体会下. /*请尊重作者劳动成果,转载请标明原文链接:*/ /* https://w ...

  3. org.springframework.beans.factory.BeanCreationException: Could not autowire field org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.xxxx.service.sys.impl.ProcEn

    七月 01, 2019 4:34:20 下午 org.apache.catalina.core.StandardContext listenerStart .....org.springframewo ...

  4. Angular4.0从入门到实战打造在线竞拍网站学习笔记之一--组件

    Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 Angular4.0数据绑定&管道 最近搞到手了一部Angular4的视频教程,这几天正好 ...

  5. Apache配置URL重定向

    Apache配置URL重定向 修改/etc/httpd/conf/httpd.conf文件的内容 <Directory "/var/www"> AllowOverrid ...

  6. 前端Web浏览器基于Flash如何实时播放监控视频画面(一)之获取监控摄像头的RTSP流

    本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 获取 现在市场上普见的摄像头都支持RTSP协议,如果你不懂什么是RTSP协议, ...

  7. HDU 3061:Battle(最大权闭合图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3061 题意:中文题意. 思路:和上一题神似啊,比上一题还简单,重新看了遍论文让我对这个理解更加深了. 闭合图:如 ...

  8. 走近Java之包装器类Integer

    前几天,有个同事问了我一个关于Integer类赋值的问题,很有意思,我们一起来看一下(如果有说的不正确的地方,欢迎大家指正). 如上图,同样是赋值,但是两次比较的结果完全不同.我们走近了解一下. 在I ...

  9. 常见Code Review过程中发现的问题-续

    上一篇列举了一些比较常见的Code Review问题列表,文末有链接,可追溯查看.本篇为上篇的姊妹篇,继续列举一些上篇遗漏的或不易发现的问题清单,希望能整体性把一些常见的问题表述出来. 测试数据不具有 ...

  10. 源代码扫描工具Fortify SCA与FindBugs的简单对比

    前段时间因为工作原因需要对java源代码进行扫描,现结合使用经验对静态代码扫描工具Fortify SCA与FindBugs进行一个简单的对比. 一.Fortify SCA Fortify SCA是由全 ...