如何显示第一次提交'git日志'?

我有一个Git项目,它有很长的历史。我想要显示第一个提交。

我怎么做呢?

158484 次浏览

我想这不是最漂亮的方式:

git log --pretty=oneline | wc -l

这就给出了一个数字

git log HEAD~<The number minus one>

我发现:

git log --reverse

从开始显示提交。

git log $(git log --pretty=format:%H|tail -1)

你可以把你的log颠倒过来,直接指向第一个结果。

git log --pretty=oneline --reverse | head -1

简短的回答

git rev-list --max-parents=0 HEAD

(from tiho's comment.;As Chris Johnsen notice --max-parents是在这个答案发布后引入的。)

解释

从技术上讲,可能有多个根提交。当多个先前独立的历史合并在一起时,就会发生这种情况。当一个项目通过子树合并集成时,这是很常见的。

git.git存储库的历史图中有六个根提交(Linus的初始提交,gitk,一些最初单独的工具,git-guigitwebgit-p4)。在这种情况下,我们知道e83c516可能是我们感兴趣的。它既是最早的提交,也是根提交。

在一般情况下,事情就不那么简单了。

假设libfoo已经开发了一段时间,并将其历史保存在Git存储库(libfoo.git)中。独立地,“bar”项目也在开发中(在bar.git中),但不像libfoo那样长(在libfoo.git中具有最早日期的提交有一个日期在bar.git中具有最早日期的提交之前)。在某些时候,bar的开发人员决定通过使用子树合并将libfoo合并到他们的项目中。在此合并之前,确定bar.git中的“第一次”提交可能很简单(可能只有一个根提交)。然而,在合并之后,会有多个根提交,最早的根提交实际上来自libfoo的历史,而不是“bar”。

你可以像这样找到历史DAG的所有根提交:

git rev-list --max-parents=0 HEAD

为了记录,如果--max-parents不可用,这也是有效的:

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

如果你在适当的地方有有用的标签,那么git name-rev可能会给你一个历史的快速概述:

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin

奖金

经常使用这个吗?很难记住?为快速访问添加一个git别名

git config --global alias.first "rev-list --max-parents=0 HEAD"

现在你可以简单地做

git first

git log --format="%h" | tail -1给你提交哈希值(即0dd89fb),你可以将其输入到其他命令中,方法如下

git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD来查看最后一天的所有提交。

查看只有第一次提交的提交哈希值:

git rev-list --max-parents=0 HEAD

要查看完整的git log,带有commit消息,仅用于第一次提交:

git log $(git rev-list --max-parents=0 HEAD)

要查看所有git log消息按倒序排列,从顶部的第一次提交(而不是底部)到底部的最后一次(最近)提交(而不是顶部):

git log --reverse

引用:

  1. 我如何学习上面的第一个命令:[公认的答案]如何显示第一次提交'git日志'?(上面的第二个命令是我自己的贡献)
  2. 我学习了git log --reverse 来自@Nyambaa获得最多赞的回答
git log --max-parents=0

和公认的答案一样,但格式更好。