Git责备 - 事先提交?

Sed*_*ien 366 git commit blame

是否有可能报告提交之前查看谁编辑了特定行git blame,例如给定行的提交历史记录?

例如,我运行以下(在极好的uncrustify项目上):

$ git blame -L10,+1 src/options.cpp
^fe25b6d (Ben Gardner 2009-10-17 13:13:55 -0500 10) #include "prototypes.h"
Run Code Online (Sandbox Code Playgroud)

如何提交之前找出谁编辑了该行fe25b6d?又是谁之前编辑它承诺?

Amb*_*ber 366

git blame -L 10,+1 fe25b6d^ -- src/options.cpp
Run Code Online (Sandbox Code Playgroud)

您可以指定git blame的修订版,从(而不是默认值HEAD)开始回顾; fe25b6d^是...的父母fe25b6d.

  • 您是否可以获得完整的历史记录,而无需使用不同的哈希值多次重新输入命令? (96认同)
  • @Amber:非常肯定你是对的,因为这个功能不存在,但它看起来似乎可以通过简单地做一个人类会做的事情来天真地实现:责备它一次,抓住报告的信息,责怪那个, 等等. (17认同)
  • git gui可以很容易地检查一行的历史记录,因为版本是可点击的. (15认同)
  • 我不相信Git有一种内置的方式来获取触及行号的每一个责任(哪种有意义,因为由于插入和删除,给定的行在整个文件历史中可能没有一致的行号(线). (12认同)
  • @shadyabhi` - `通常用作命令行参数中的分隔符 - 在Git的情况下,它通常用于从文件名列表中分离提交哈希等内容. (5认同)
  • 琥珀的答案是正确的,但我发现它不清楚; 语法是:`git blame {sha1} - {path/to/file}`*注意:` - `用于将tree-ish sha1与相对文件路径分开.[1](http://stackoverflow.com/questions/5098256/git-blame-prior-commits#comment17431791_5098314)*例如:`git blame master - index.php`.完全赞赏[Amber](http://stackoverflow.com/users/148870/amber)了解所有事情!:) (4认同)
  • 当然; 你可以用一个相当简单的shell脚本天真地做到这一点. (2认同)
  • 什么是` - `在这做什么?我在哪里可以在文档中了解更多信息? (2认同)
  • @AndersZommarin请查看[Thomas的回答](http://stackoverflow.com/a/32396170/1102648)了解您的需求 (2认同)

Nav*_*eet 179

您可以使用git log -L查看一系列行的演变.

例如 :

git log -L 15,23:filename.txt
Run Code Online (Sandbox Code Playgroud)

表示"跟踪名为filename.txt的文件中第15行到第23行的演变".

  • 这是一个可靠的答案,并解决了Anders Zommarin上面关于如何查看特定行随时间变化的问题. (11认同)
  • 要显示所有行,请使用:git log -p filename.txt (7认同)
  • 仅供参考:git log -L <start>,<end>:<file>需要Git 1.8.4+,请参阅:https://git-scm.com/docs/git-log#git-log--Lltstartgtltendgtltfilegt以获取语法选项 (4认同)
  • 对于从另一个文件中移动的行,这对我不起作用。 (2认同)
  • 我强烈建议添加“-p”来显示所有类似“git diff”的更改,例如,对于整个文件:“git log -p filename.txt”。 (2认同)
  • 最后,我找到了我要找的命令。太感谢了!这解决了我的问题。 (2认同)

Tho*_*ner 26

琥珀的答案是正确的,但我发现它不清楚; 语法是:

git blame {commit_id} -- {path/to/file}
Run Code Online (Sandbox Code Playgroud)

注意:--用于将tree-ish sha1与相对文件路径分开.1

例如:

git blame master -- index.html
Run Code Online (Sandbox Code Playgroud)

充分肯定Amber知道所有的事情!:)


Hol*_*nke 25

您可能想看看:

git gui blame <filename>
Run Code Online (Sandbox Code Playgroud)

为您提供一个很好的图形显示,如"git blame",但每行可点击链接,以进入早期提交.将鼠标悬停在链接上以获取包含提交详细信息的弹出窗口.不是我的学分...在这里找到它:

http://zsoltfabok.com/blog/2012/02/git-blame-line-history/

git gui是git的图形化Tcl/Tc接口.没有任何其他参数,它启动一个非常简单但有用的图形应用程序,用于提交文件,帅哥甚至单行和其他类似的命令,如修改,恢复,推...它是git股票套件的一部分.在Windows上,它包含在安装程序中.关于debian - 我不知道其他*nix系统 - 它必须单独安装:

apt-get install git-gui
Run Code Online (Sandbox Code Playgroud)

来自文档:

https://git-scm.com/docs/git-gui

描述

基于Tcl/Tk的Git图形用户界面.git gui专注于允许用户通过进行新提交,修改现有提交,创建分支,执行本地合并以及获取/推送到远程存储库来更改其存储库.

与gitk不同,git gui专注于提交生成和单个文件注释,并不显示项目历史记录.然而,它确实提供了菜单操作以从git gui中启动gitk会话.

众所周知,git gui适用于所有流行的UNIX系统,Mac OS X和Windows(在Cygwin和MSYS下).在可能的范围内遵循OS特定的用户界面指南,使git gui成为用户的相当原生的界面.

COMMANDS

在给定版本(或工作目录,如果未指定)上的指定文件上启动blame查看器.

浏览器

启动树形浏览器,显示指定提交中的所有文件.通过浏览器选择的文件在责备查看器中打开.

citool

启动git gui并安排在退出并返回shell之前进行一次提交.界面仅限于提交操作,稍微减少了应用程序的启动时间并简化了菜单栏.

显示当前运行的git gui版本.


Wil*_*ard 17

在前面的答案的基础上,这个bash单行应该给你你想要的东西.它通过最近5次修订显示特定文件的特定行的git blame历史记录:

LINE=10 FILE=src/options.cpp REVS=5; for commit in $(git rev-list -n $REVS HEAD $FILE); do git blame -n -L$LINE,+1 $commit -- $FILE; done
Run Code Online (Sandbox Code Playgroud)

在此命令的输出中,您可能会看到对于特定提交,行更改的内容或显示的行号甚至可能会更改.

这通常表示在该特定提交之后第一次添加了该行.它还可以指示该行已从文件的另一部分移动.

  • 请注意,这是$ FILE更改的最后一个$ REVS修订版,而不是$ LINE更改的最后一个$ REVS修订版. (5认同)

Tho*_*s W 12

还有recursive-blame.它可以安装

npm install -g recursive-blame
Run Code Online (Sandbox Code Playgroud)


Man*_*nnu 9

这个问题的一个非常独特的解决方案是使用git log:

git log -p -M --follow --stat - path/to/your/file

正如Andre 在这里所解释的那样

  • 我创建了一个别名来使用它: `git config --global alias.changes 'log -p -M --follow --stat --'` 然后我可以简单地输入 `git Changes path/to/your/file` (6认同)
  • 这是迄今为止最好的答案,也是我一直在寻找的。简单又优雅。 (3认同)

Mic*_*ngs 7

从 Git 2.23 开始,你可以使用git irrev --ignore-rev

对于问题中给出的示例,这将是:

git blame -L10,+1 src/options.cpp --ignore-rev fe25b6d
Run Code Online (Sandbox Code Playgroud)

(然而,这是一个棘手的问题,因为 fe25b6d 是该文件的第一个修订版!)


war*_*iuc 6

如果您使用的是JetBrains Idea IDE(及其衍生产品),则可以选择几行,右键单击上下文菜单,然后单击Git->显示历史记录以进行选择。您将看到影响所选行的提交列表:

在此处输入图片说明