【问题标题】:git blame on a line modified multiple times?git责备多次修改的行?
【发布时间】:2023-03-03 11:58:02
【问题描述】:

如果一行在两个版本之间来回修改了几次, git blame 似乎只显示该行的最新提交。

是否可以让它显示该行的所有提交?

【问题讨论】:

标签: git blame


【解决方案1】:

根据此处已经提供的答案,我在我的 PATH 中创建了一个名为 git-rblame 的脚本,其中包含以下内容:

#!/bin/bash

revision="HEAD"

while [ -n "${revision}" ]
do
    result=$(git blame "${revision}" "$@")
    revision="${result%% *}"
    if [[ "${revision}" != [a-z0-9]*[a-z0-9] ]]
    then
        revision=""
    else
        echo "${result}"
        revision="${revision}~"
    fi
done

然后我可以打电话给git rblame -L xxx,yyy myfilename,我会得到文件的完整历史记录和给定的内容。鉴于行号可能会改变,有意义的正则表达式似乎效果更好。

【讨论】:

    【解决方案2】:

    git blame 自己不能这样做(但请参阅下面的解决方法)。

    但是git gui 有一个责备模式,可以让您深入了解提交。

    安装后使用git gui blame <filename> 调用它。

    【讨论】:

      【解决方案3】:

      我不知道如何同时显示该行上的所有提交,但您可以使用git blame SHA~ -- filename“钻取”对该行的每个更改。每次迭代责备时,只需插入修改该行的下一个最近的“最新”SHA。

      示例:第一次运行git blame foo.php 时,您看到该行已被f8e2e89a 修改,因此您退出并运行git blame f8e2e89a~ -- foo.php,然后git 将显示谁修改了f8e2e89a 之前的行。冲洗并根据需要重复。

      【讨论】:

        【解决方案4】:

        你不能用git blame 做你想做的事,但你可能会用单词差异算法或其他一些自定义差异工具来接近。特别是,您可以在日志输出中显示逐行单词差异,如下所示:

        # Show deletions delimited with [- -], and additions with {+ +}.
        git log --patch --word-diff=plain
        

        另见

        Extract authorship information from git repository

        【讨论】:

          【解决方案5】:

          git blame 的目的是显示哪个提交最近修改了特定文件中的哪些行。它没有显示同一行的多个版本的选项。

          【讨论】:

          • 谢谢。不幸的是,我正在寻找类似于 perforce 的责备按钮的东西,它显示了历史上的所有提交
          • 您可以通过 git blame HEAD~n -- filename 来模拟,其中 n 从 0 开始并增加。这不是交互式的,但每次增加数字时,您都会回顾历史。
          • 呵呵呵呵。在我的 svn 时代,我曾经做过类似的事情: perl -e 'for $v ( 0 .. $current_version ) { system(qq(svn diff -r).($v-1).qq( -r$v mysource .java ) } '
          猜你喜欢
          • 2011-05-23
          • 2017-04-17
          • 2011-07-03
          • 2020-12-12
          • 1970-01-01
          • 2016-04-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多