如何找出谁(什么用户)为给定的git提交提交已删除的代码行?

时间:2016-05-09 07:02:50

标签: git

在git版本控制中,我想知道谁(什么用户)最初为给定的提交提交了已删除的代码行。

我怎么能找到这个?

更新:我想为许多git提交检查这个;因此,使用图形界面不是一种选择。我正在寻找一个git命令(或连续命令)来使用python脚本自动执行此过程。

2 个答案:

答案 0 :(得分:3)

如果我正确理解了这个问题,您想找到最初添加了刚刚删除的行的人吗?例如,在this commit中,我们看到行=head1 C<import>已删除。谁最初写了那条线?

--- a/lib/perl5i.pm
+++ b/lib/perl5i.pm
@@ -1118,27 +1118,29 @@ Example:
     from CPAN or another repository.  Your library paths are:
         Indented list of paths, 1 per line...

-=head1 C<import>

-This subroutine is called automatically, see L<perlfunc/import>.
+=head1 Turning off features
...

您想要的命令是git blame。这将显示最后修改每一行的提交。对于我们的示例,git blame lib/perl5i.pm会向我们显示最后触及文件每行的人。

b755dda5 (Michael G. Schwern      2009-04-22 21:29:08 -0700    1) package perl5i;
b755dda5 (Michael G. Schwern      2009-04-22 21:29:08 -0700    2) 
8baa7538 (Michael G. Schwern      2010-01-29 21:34:14 -0800    3) ######################################
a6231688 (Michael G. Schwern      2010-03-14 13:55:50 -0700    4) # The real code is in perl5i::2      #
8baa7538 (Michael G. Schwern      2010-01-29 21:34:14 -0800    5) # Please patch that                  #
8baa7538 (Michael G. Schwern      2010-01-29 21:34:14 -0800    6) ######################################
...

这是提交,作者姓名,提交时间以及行。

这不一定是该行的原作者。即使是提交简单空格的提交也会出现。要避免这种情况,请添加-w以忽略空格更改。 git blame -w lib/perl5i.pm

但那是当前的提交。你可以要求特定提交的责任,我们的例子是4519fb29cef删除了该行。如果我们执行git blame -w lib/perl5i.pm 4519fb29cef该行已经被删除,那么它就不会显示出来。相反,在先前的提交上执行git blamegit blame -w lib/perl5i.pm 4519fb29cef^

...
4afdb783 (Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯     2013-03-01 11:16:27 +0100 1121) =head1 C<import>
4afdb783 (Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯     2013-03-01 11:16:27 +0100 1122) 
4afdb783 (Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯     2013-03-01 11:16:27 +0100 1123) This subroutine is called automatically, see L<perlfunc/import>.
...

4afdb783提交Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯上次触及该行。由于有时候更改可能很简单,请执行git log -p 4afdb783来验证更改。如果没有,再做同样的事情。在该提交之前运行git blamegit blame -w 4afdb783^。继续,直到你发生重大变化。

答案 1 :(得分:1)

你可以使用git blame:https://git-scm.com/docs/git-blame

git blame接受一个文件,并使用最后修改该行的修订版中的信息注释给定文件中的每一行。 (可选)从给定修订开始注释。

否则,您可以使用gitk之类的图形工具来查看提交更改的内容以及所有内容。