git-log和git-whatchanged有什么区别?

40

2
最近提交(2013年8月)现在澄清了这两个命令之间的差异,并鼓励只使用“git log”。请参见下面的我的答案 - VonC
3个回答

40

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

  

鼓励新用户使用“log”代替。现在,这些命令已经统一了,只是有不同的默认值

     

git log 在2005年6月初添加时,它只允许您查看日志消息而没有差异。直到2006年4月初,该命令才学会使用差异选项。
  因此,高级用户倾向于使用自2005年5月中旬就已存在且支持差异选项的 'whatchanged'。


这是git whatchanged新手指南的更新内容:

  

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

     

该命令主要出于历史原因而保留。 很多人在学习Git之前通过阅读Linux内核邮件列表来了解它,所以他们的手指已经习惯了输入它

torek评论中提到的git whatchanged 的等效命令是:

git log --raw --no-merges

(这将避免这个问题的出现)


2
感谢您回来并添加内容。总的来说,我认为整个Git社区都非常感谢您、Charles Bailey、Jakub Narębski和其他在SO上花费大量时间回答Git问题的人们 :)。 - Alexander Bird
2
可能应该提一下,您可以使用 git log --raw --no-merges 命令来获得相同的效果,而不必使用名义上已弃用的命令。 - torek
@torek 谢谢。我已经看到了 https://dev59.com/g7Hma4cB1Zd3GeqPLnKT,所以我已经相应地更新了这个答案。 - VonC

13

在最简单的形式下,'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

不过对于whatchanged:

$ 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'以差异/补丁形式显示更改。


谢谢。有没有一种功能,一个命令可以做到而另一个命令无法做到的? - Alexander Bird
2
看起来答案是否定的。查看git源代码显示两者除了默认选项外完全相同。'git log'将始终显示标题;'git whatchanged'将始终1)显示差异输出,2)简化历史记录并3)默认使用原始差异格式。 - GoZoner
2
默认情况下,git-whatchanged 不包括合并记录,而 git-log 则包括。我还没有找到选项(如果有的话)可以让 git-log 以与 git-whatchanged 相同的方式输出更改文件列表。 - Ken Thomases
2
@Ken - 你可以使用 git-log --stat 命令来显示更改的文件列表(我认为这比 git-whatchanged 更好,因为它显示了更改行数并支持颜色)。 - Nick Felt
在文件名前面的:100644 100644 f2e4113... d415016...部分代表什么? - ThaDon
@ThaDon 看起来像是 :oldmode newmode oldobjecthash newobjecthash - Colin D Bennett

3

我并不完全同意。你能否看到如何使用log合并更改的文件呢?

我没有找到这个功能,但它对于了解文件何时在某个分支中合并非常有用,例如:

file c.cbranch1 中具有从 2012 年 1 月 1 日开始的提交日期,如果您将其合并到 branch2 中,并且稍后想要跟踪该提交是何时引入到 branch2 中的,那么 git log 可以帮助吗?如果您拥有合并,则可以使用 git whatchanged -m sha1 在其中搜索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接