410

我看到了很多关于使用方法的问题git blame,但我并不真正了解它们。

Blame我在 GitHub 界面上的文件顶部看到一个按钮。单击它后,它会在左侧栏中显示一些与用户名的差异。这说明什么?

为什么git blame实际使用,除了 GitHub?

4

6 回答 6

301

来自git-blame

使用上次修改该行的修订版中的信息注释给定文件中的每一行。或者,从给定的修订开始注释。

当指定一次或多次时,-L 将注释限制为请求的行。

例子:

johndoe@server.com:~# git blame .htaccess
...
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  4) allow from all
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  5)
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  6) <IfModule mod_rewrite.c>
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  7)     RewriteEngine On
...

请注意,git blame它不会按时间顺序显示每行修改历史。它只显示谁是最后一个更改文档中的一行的人,直到HEAD.

也就是说,为了查看文档行的完整历史记录/日志,您需要git blame path/to/filegit log.

于 2015-07-03T10:49:04.047 回答
244

这是为了弄清楚哪个同事写了特定的行或破坏了项目,所以你可以责怪他们:)

于 2017-04-13T09:06:50.840 回答
97

来自 GitHub

blame 命令是 Git 的一项功能,旨在帮助您确定谁对文件进行了更改。

尽管它的名字听起来很负面,但 git blame 实际上是无害的。它的主要功能是指出谁更改了文件中的哪些行以及原因。它可以成为识别代码更改的有用工具。

基本上,git-blame用于显示文件的每一行最后修改的版本和作者。这就像检查文件的开发历史。

于 2015-07-03T09:15:18.530 回答
42

git blame命令用于了解谁/哪个提交负责对文件进行的最新更改。还可以看到每一行的作者/提交。

git blame filename(提交负责更改代码中的所有行)

git blame filename -L 0,10(负责从“0”行更改为“10”行的提交)

责备还有许多其他选择,但通常这些可能会有所帮助。

于 2018-03-07T05:22:06.737 回答
9

git blame命令用于逐行检查文件的内容,并查看每行最后一次修改的时间以及修改的作者是谁。

如果代码中存在错误,请使用它来识别是谁编写的,然后你可以责怪他。Git 责备是得到责备(d)。

如果您需要了解一行代码的历史,请使用git log -S"code here",比 git blame 更简单。

git log 与 git 责备

于 2020-03-30T07:08:34.447 回答
4

git blame命令使用上次修改该行的修订版的信息来注释行,并且......使用 Git 2.22(2019 年第二季度)由于围绕“ git blame”的性能修复,特别是在线性历史中(这是我们应该优化的规范)。

请参阅David Kastrup ( ) 的提交 f892014(2019 年 4 月 2 日(由Junio C Hamano 合并 -- --4d8c4da 提交中,2019 年 4 月 25 日)fedelibregitster

blame.c: 不要急切地丢弃原始 blob

当父 blob 已经有块排队等待归咎时,在一个归咎步骤结束时删除 blob 将导致它立即重新加载,从而在处理线性历史时将 I/O 量和解包量加倍。

将此类父 blob 保留在内存中似乎是一种合理的优化,主要在处理来自旧分支的合并时会产生额外的内存压力。

于 2019-04-27T21:26:05.513 回答