如何找到一行代码的更改历史记录

时间:2013-02-27 04:15:54

标签: git

git blame可以用来找出修改过的提交,但我遇到的情况是整个文件都是从我无法分辨的地方复制的。

$ git blame a.c
c59f772b (a@google.com 2011-08-25 01:07:44 +0000   1)   #include <stdio.h>
c59f772b (a@google.com 2011-08-25 01:07:44 +0000   2)   
c59f772b (a@google.com 2011-08-25 01:07:44 +0000   3)   int main(int argc, char **argv) {
c59f772b (a@google.com 2011-08-25 01:07:44 +0000   4)       void *handle;
c59f772b (a@google.com 2011-08-25 01:07:44 +0000   5)       double (*cosine)(double);
...

$ git log c59f772b
commit c59f772bc273e65985236ba665f7a88492a33235
Author: a@google.com
Date:   Thu Aug 25 01:07:44 2011 +0000

    Cloning a bunch of stuff from the another repository
    No changes, as is.

此提交只是复制代码。我仍然不知道哪个以及谁实际编写了这段代码。

我可以列出代码更改历史或类似内容吗?

3 个答案:

答案 0 :(得分:4)

了解git的力量:)

git blame -M -C -C -C -w

来自git help blame

  

-C

     

除了-M之外,检测从同一提交中修改的其他文件移动或复制的行。这对你很有用   重新组织您的程序并跨文件移动代码。当这个   选项被给出两次,该命令另外查找副本   创建文件的提交中的其他文件。当这个选项是   给定三次,该命令另外查找来自的副本   任何提交中的其他文件。

答案 1 :(得分:0)

似乎没有好办法,因为你只是从另一个地方复制文件并提交它。

如果你知道那些类,你可以使用git commit --author authorname

将帮助您打印所有相关提交。

BR, 添

答案 2 :(得分:0)

如果要显示对单个文件的更改,并查看文件名更改,请执行以下操作:

git log --stat --follow -- <filename>

现在要归咎于前一点的文件,你必须指定可能不再存在的旧文件名。

git blame <hash_before_move> -- <old_file_name>