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

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

我该怎么做呢?

简短的回答

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

(来自tiho的评论 ,正如克里斯·约翰森注意到的那样 ,在这个答案发布之后, --max-parents被介绍了。)

说明

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

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

一般情况下并不那么简单。

想象一下, libfoo已经开发了一段时间,并保存在Git仓库( libfoo.git )中。 独立地,“bar”项目也正在开发中(在bar.git ),但是没有这么长时间的libfoolibfoo.git中最早的提交date在提交之前的最早date为bar.git )。 在某些时候,“bar”的开发者通过使用子树合并决定将libfoo合并到他们的项目中。 在合并之前,确定bar.git的“第一个”提交可能是微不足道的(可能只有一个根提交)。 然而,合并之后,有多个根提交,最早的根提交实际上来自libfoo的历史,而不是“bar”。

你可以find历史DAG的所有根提交:

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

为了logging,如果--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 

我find:

 git log --reverse 

从开始显示提交。

你可以扭转你的很多,只是第一个结果尾巴。

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

不是最美丽的做法我猜:

 git log --pretty=oneline | wc -l 

这给你一个数字

 git log HEAD~<The number minus one> 

@MHC实际上是:

 git log --pretty=oneline | wc -l git log HEAD~<the number minus TWO>