34

我试图总结代码库的“旧”和“新”状态之间的区别。

  • 我可以只做“git log”,但遗憾的是提交消息并不总是足够的。
  • 我可以做“git diff”,但我希望看到对我所看到的差异的一些解释,或者至少提交哈希以备后用
  • 我可以对更改的文件执行“git diff --stat”然后“git annotate”,但我不知道如何要求注释仅显示自特定提交以来的更改。

理想情况下,我想获得“git diff”的输出,其中所有“+”和“-”行都将使用有关上次引入这些更改的提交的信息进行注释;理想情况下,采用 git pretty 格式(例如哈希、作者和日期)。

如何做到这一点?

4

7 回答 7

7

你可以写一个小脚本来做类似的事情

git blame before > before
git blame after > after
diff -u before after

:)

man 1 git回复:GIT_EXTERNAL_DIFF

于 2012-11-06T14:50:09.610 回答
6

git-diff-blame似乎相关。

在作者和提交等责备信息旁边显示差异

于 2018-04-11T11:28:07.733 回答
4

请注意,您可以要求git blame

  • 从某个提交进行注释请参阅“ Git 责备 - 先前的提交? ”:git blame -c fe25b6d^ -- src/options.cpp
  • 或从某个日期注释:
    git blame -c --since=3.weeks -- foo

注意之二:我更喜欢git blame -cgit annotate

此命令与此命令的唯一区别在于git-blame它们使用的输出格式略有不同,并且此命令的存在只是为了向后兼容以支持现有脚本,并为来自其他 SCM 系统的人们提供更熟悉的命令名称。

于 2012-11-06T14:07:19.147 回答
3

我认为这目前不容易。但是,如果您想查看包含责备信息的文件提交差异的上下文,您可以执行以下操作:

$ sha1=$(git rev-parse --short HEAD); git blame $sha1 -- filename |grep -C5 --color ^$sha1

git blame将照常注释文件,并grep为该提交中引入的每个更改显示五行上下文。

于 2015-12-08T09:01:21.397 回答
2

我研究了一个工具(基于python)来做到这一点......甚至计算删除的行做一些接近反向注释的事情(反向注释并不是完全需要的,因为它会显示行的最后修订present,它实际上不会指向删除该行的修订版,因此实际上需要更多分析才能弄清楚)。我希望它适合您的需求

https://github.com/eantoranz/difflame

于 2019-04-26T16:18:18.300 回答
1

我不知道是否有一种简单的方法可以获得带注释的git diff结果(比如“被指责的差异”)。

您可以使用--full-diff选项git log -p来获取提交消息 + 差异。

于 2012-11-06T14:12:21.173 回答
0

对于单个文件,我有同样的问题,我发现 Visual Studio Code (vscode) 很有帮助。

  • 查看不同目录中的 2 个分支
  • 在一个分支中打开一个文件
  • 将 (ctrl-shift-p) 与另一个目录中的相同文件进行比较在此处输入图像描述
  • 将鼠标悬停在差异的提交信息上在此处输入图像描述以查看额外的提交信息
于 2021-12-16T13:52:07.060 回答