git-log 和 git-whatchanged 之间的区别?

Posted

技术标签:

【中文标题】git-log 和 git-whatchanged 之间的区别?【英文标题】:Difference between git-log and git-whatchanged? 【发布时间】:2012-04-18 20:18:10 【问题描述】:
    给this answer 另一个问题,并且 鉴于 git-log 和 git-whatchanged 的手册页都说它们来自 git-rev-list...

...那么这两个命令有什么区别呢?为什么要同时拥有它们?

【问题讨论】:

最近的一次提交(2013 年 8 月)现在阐明了这两个命令之间的区别,并鼓励仅使用 git log。见my answer below 【参考方案1】:

commit 52f425e1(2013 年 8 月 30 日)提到:

鼓励新用户改用“log”。这些天来,这些命令是统一的,只是有不同的默认值

'git log' 在 2005 年 6 月上旬添加时仅允许您查看日志消息,没有差异。直到 2006 年 4 月上旬,该命令才学会采用差异选项。 因此,高级用户倾向于使用自 2005 年 5 月中旬以来已经存在并支持差异选项的“whatchanged”。


这就是new version of the man page for git whatchanged 现在要说的:

鼓励新用户改用git log。这 whatchanged 命令与git log 基本相同 但默认显示原始格式差异输出并跳过合并。

保留该命令主要是出于历史原因; 许多人早在git log 被发明之前就通过阅读 Linux 内核邮件列表学习了 Git,他们的手指都经过训练可以打字

作为torek comments,git whatchanged 等价物将是:

git log --raw --no-merges

(这样可以避免this question)

【讨论】:

感谢您回来补充。总的来说,我认为整个 git 社区都非常感谢你、Charles Bailey、Jakub Narębski 以及其他任何将这么多时间花在 SO 上的 git 问题上的人 :)。 可能应该提到,您可以使用git log --raw --no-merges 来获得相同的效果,而无需使用名义上已弃用的命令。 @torek 谢谢。我见过***.com/q/54412432/6309,所以我相应地更新了这个答案。【参考方案2】:

在最简单的形式中,“git log”显示每个提交(sha、作者、日期、消息),而“git whatchanged”显示提交以及更改的文件。例如:

$ git log
commit db9f525674443314a9822a6bd6c3acce49c8f8d6
Author: ...
Date:   Wed Apr 4 22:55:33 2012 -0700

Add more

commit eed0b7aa3cad5d985b5f1d52f3c0605339c119a1
Author: ...
Date:   Tue Apr 3 20:36:04 2012 -0700

del bing/one.c

但对于改变了什么:

$ git whatchanged
commit db9f525674443314a9822a6bd6c3acce49c8f8d6
Author: ...
Date:   Wed Apr 4 22:55:33 2012 -0700

Add more

:100644 100644 f2e4113... d415016... M  bar.c

commit eed0b7aa3cad5d985b5f1d52f3c0605339c119a1
Author: ...
Date:   Tue Apr 3 20:36:04 2012 -0700

del bing/one.c

:100644 000000 e69de29... 0000000... D  bing/one.c

有很多选项可以更改每个命令的输出。例如 'git whatchanged -p' 以 diff/patch 形式显示变化。

【讨论】:

谢谢。有没有一个命令可以做而另一个命令根本做不到的功能? 看来答案是否定的。查看 git 源代码表明,除了默认选项之外,两者是相同的。 'git log' 将'总是显示标题'; 'git whatchanged' 将始终 1) 显示差异输出,2) 简化历史记录和 3) 默认使用原始差异格式。 git-whatchanged 默认不包含合并,而 git-log 包含。我还没有找到让git-log 以与git-whatchanged 相同的方式输出更改文件列表的选项(如果有的话)。 @Ken - 您可以使用git-log --stat 显示更改文件的列表(IMO 比git-whatchanged 更好的列表,因为它显示更改的行数并支持颜色)。跨度> 文件名前面的:100644 100644 f2e4113... d415016... 部分代表什么?【参考方案3】:

我不完全同意。你能看到用log合并更改的文件吗?

我没有找到这个功能,对于知道文件何时合并到某个分支非常有用,例如:

file c.c in branch1 的提交日期为 2012 年 1 月 1 日,如果您合并到 branch2,并且稍后想跟随 branch2 中引入该提交的日期,可以git log 帮助?如果你有合并,你可以用git whatchanged -m sha1在其中搜索

【讨论】:

以上是关于git-log 和 git-whatchanged 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 git-log 向上滚动而不是向下滚动

Ruby git变更日志

如何生成类似 github 的影响图?

git log 高级用法

如何运行 git log 以仅查看特定分支的更改?

如何从 GIT 标签中读取标签信息?