我有一个有悠久历史的项目。我想显示在git的第一个提交。
我如何做到这一点?

简短的答案
git rev-list --max-parents=0 HEAD
(从tiho’s comment.作为Chris Johnsen notices,–max – 父母在此答案发布后介绍。)

说明

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

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

这在一般情况下不是那么简单。

想象一下,libfoo已经开发了一段时间,并将其历史记录保存在Git存储库(libfoo.git)中。独立的,“bar”项目也在开发中(在bar.git),但不是为了长期libfoo(提交libfoo.git最早的日期有一个日期提交之前的最早日期在酒吧。 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
翻译自:https://stackoverflow.com/questions/5188914/how-to-show-first-commit-by-git-log