用于查看以前版本文件的差异的简写

时间:2013-01-22 21:04:43

标签: git diff

我可以很容易地找出自上次提交git diff HEAD^ -- <filename>以来文件发生了什么变化,但是是否有一个等效的简写来查看特定文件的差异,因为它是上次提交的,不管从那以后发生了多少次提交?或者返回该特定文件的N次提交?

上下文:我在文件中发现了一个错误,我想在它偷偷进入时进行追踪。很容易获得git log -<n> <filename>显示的特定文件的日志报告只有包含对该文件的更改的提交。很明显,我可以从log报告中复制并粘贴SHA,但我真正想要的是能够执行git diff ^ -- <filename>git diff ~2 -- <filename>之类的操作。

3 个答案:

答案 0 :(得分:35)

$ git log -p <filename>

将显示日志消息以及每个触及指定文件的提交的差异。

要仅显示与先前版本的差异,请在日志历史记录中只请求一步:

$ git log -1 -p <filename>

答案 1 :(得分:3)

您可以使用git log格式化来获取文件的先前提交的哈希值。例如,

git log --pretty=format:'%h' -1 --skip=1 <filename>

将为您提供触及特定文件的倒数第二个提交。实际上,如果您没有指定文件名,这将使您获得整个存储库的倒数第二次提交。要获得较旧的哈希值,您可以设置一个调用shell函数的git别名,如下所示:

[alias]
    prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"

要使用它,您需要键入类似git prior-hash n <filename>的内容,其中n是文件的第(n + 1)个最新版本。因此,1将是第二次提交到文件,2将是第3次到最后,等等,0将是最近提交触摸该文件。同样,如果您想要检查整个仓库,文件名是可选的。

我确定你可以从中找出如何构建diff命令:

[alias]
    prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"
    diff-prev-easy = "!dp() { git diff $(git prior-hash $1 $2).. $2; }; dp"

将类似于先前哈希别名git diff-prev-easy n <filename>使用。这将比较第(n + 1)个最后修订版与文件的最新修订版。如果你想比较第(n + 1)个最后修订版和第n个最后修订版,那么这只是一个简单的改变:

[alias]
    prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"
    diff-prev = "!dp() { git diff $(git prior-hash $1 $2)..$(git prior-hash $(($1 - 1)) $2) $2; }; dp"
再次使用

git diff-prev n <filename>

值得注意的一个潜在问题是,git log按时间顺序列出提交,这可能不是您想要的。考虑一下这段历史:

1 - 2 - - - 4 - 5   master
      \       /
        3 - -       develop

我们的git diff-prev 1命令会产生提交4和5之间的差异,正如预期的那样。但是git diff-prev 2会显示提交3和4之间的差异,这可能是不可取的。

答案 2 :(得分:1)

git blame可以让您快速到达目的地。