如何通过'git log'显示第一次提交?

时间:2011-03-04 02:07:57

标签: git

我有一个历史悠久的项目。我想在git上显示第一个提交。

我该怎么做?

6 个答案:

答案 0 :(得分:361)

我发现:

git log --reverse

显示从开始提交。

答案 1 :(得分:232)

简短回答

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

(来自tiho's comment。作为Chris Johnsen notices,在发布此答案后引入了--max-parents。)

说明

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

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

一般情况下并非如此简单。

想象一下, libfoo 已经开发了一段时间,并将其历史保存在Git存储库(libfoo.git)中。独立地,“bar”项目也在开发中(在bar.git),但不是很长的 libfoo libfoo.git中最早的日期提交有一个日期在提交之前,bar.git)中的最早日期。在某些时候,“bar”的开发人员决定通过使用子树合并将 libfoo 合并到他们的项目中。在此合并之前,确定bar.git中的“第一个”提交可能是微不足道的(可能只有一个根提交)。但是,在合并之后,有多个root提交,最早的root提交实际上来自 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

答案 2 :(得分:27)

你可以撤消你的日志,然后把它作为第一个结果。

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

答案 3 :(得分:10)

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

答案 4 :(得分:4)

我猜这不是最美妙的方式:

git log --pretty=oneline | wc -l

这会给你一个数字

git log HEAD~<The number minus one>

答案 5 :(得分:0)

git log --format="%h" | tail -1为您提供提交哈希(即0dd89fb),您可以通过执行

之类的操作将其添加到其他命令中。

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