在git版本控制中,我想知道谁(什么用户)最初为给定的提交提交了已删除的代码行。
我怎么能找到这个?
更新:我想为许多git提交检查这个;因此,使用图形界面不是一种选择。我正在寻找一个git命令(或连续命令)来使用python脚本自动执行此过程。
答案 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 blame
。 git 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 blame
:git blame -w 4afdb783^
。继续,直到你发生重大变化。
答案 1 :(得分:1)
你可以使用git blame:https://git-scm.com/docs/git-blame
git blame
接受一个文件,并使用最后修改该行的修订版中的信息注释给定文件中的每一行。 (可选)从给定修订开始注释。
否则,您可以使用gitk
之类的图形工具来查看提交更改的内容以及所有内容。