前言
我是在去年,也就是 2020 年的时候,进入一家新的公司才学习的 Git。
有时候,咱们想要弄清楚某一行代码到底是谁退出进来的,此时咱们须要从 git log
中翻找,很是麻烦。
最近才偶尔发现 git blame
这个命令,正是解决“找出真凶”这个问题的疾速办法。
找出“真凶”
首先,你要须要有一个我的项目,我最近须要查阅 openjdk 的源码剖析一个问题,所以罗唆就用它吧。
1. 从 Gitee 克隆近程库:
git clone https://gitee.com/mirrors/openjdk.git
openjdk 当初曾经在 Github 下面开源了, 下载比以前用 Mercurial 从 openjdk.java.net 下载不便多了
国内 Gitee 下面每天从 GitHub 上同步的 openjdk 镜像,对于国内开发者而言,那就更爽了。
2. 进入工作目录
cd openjdk
3. 查看标签
git tag
按方向键 ↑
或者 ↓
能够滚动查看, 输出 q
能够退出以后的查看。
加上 -l
或者 --list
命令应用通配符来过滤 tag。
例如过滤 jdk8 的标签
git tag -l "jdk8*"
4. 切出标签
git checkout jdk8-b120
如果须要批改,比方加上集体的正文,须要依据标签 jdk8-b120 新切一个分支 feature-jdk8-b120
git checkout -b feature-jdk8-b120 jdk8-b120
5. 查看文件目录
ls -al
列出文件目录:
如果咱们要找 java.net.Socket
, 那么就应该去 /jdk/src
目录上来寻找。
cd jdk/src
其中有两大类文件夹:
- 一类示意操作系统命名的文件夹
- 另一类则是 share 文件夹
进入 share/classes/java/net
cd share/classes/java/net
6.git blame
查看某个文件的每一行内容由谁所写:
git blame 文件名
以查看 Socket.java
为例:
git blame Socket.java
后果模式如图所示:
图中 1)、2) 这些符号代表文件的第多少行,符号前面就是文件当行的内容。
从上图咱们就能够看出,J. Duke 这位同志,在 2007-12-01 00:00:00 这个工夫点提交了第 1 行代码。
如果只查文件中某一部分由谁所写:
git blame 文件名 | grep "查找词"
或者:
git blame 文件名 -L a,b
-L 参数示意前面接的是行号 (Line)
a,b
代表查问文件的第 a 行到第 b 行之间的文件内容状况。
a,
则代表从第 a 行到文件结尾
,b
则代表从文件结尾到第 b 行。
6.1 查关键字
如果咱们要查 setReceiveBufferSize
这个办法是谁引入进来的,命令则如下所示:
git blame Socket.java | grep "setReceiveBufferSize"
咱们发现 setReceiveBufferSize
这个办法是 J. Duke 引入进来的。
6.2 查行数
比方咱们晓得构造函数 public Socket(Proxy proxy)
是 115 ~ 151 行, 咱们能够查看一下哪些人参加编写了该构造函数:
git blame Socket.java -L 115,151
如果你想更加弱小,这里有 git blame 命令的具体文档:https://git-scm.com/docs/git-…,供你缓缓啃。
参考博客
Git 系列之 git blame:找出真凶
Git: git tag 应用小结 (给公布版本打标记,切换并批改某个历史版本)
OpenJDK 源码的目录构造
Gitee 下载特定的 Tag 或分支