如何显示“ git log”的首次提交?


288

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

我该怎么做呢?


2
我只找到一种显示最后一个的方法git log -1
alex

Answers:


298

简短答案

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

(摘自tiho的评论。正如克里斯·约翰森Chris Johnsen)所注意到的那样--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的历史,而不是“酒吧”。

您可以找到历史记录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

49
我相信git rev-list --max-parents=0 HEAD会做同样的事情,并且会更简单。
tiho 2013年

3
@tiho:是的,它也一样,并且更简单;尽管在提出这个问题/答案时还没有“发明”该选项。
克里斯·约翰森

在我看来,第一次提交更多的是提交而不是提交
tiwo

@tiho我认为您的答案应该是自己的答案,而不仅仅是评论。这样,它将更加突出,您将获得当之无愧的积分。
罗素席尔瓦

@RussellSilva我不在乎要点,但我相信可以编辑其他人的答案,这可能比添加新答案更好。我自己做起来并不很自在,请随意做:)
tiho 2014年

413

我找到:

git log --reverse

从开始显示提交。


19
有趣的git log --reverse -5是,--reverse由于某种原因它忽略了
Dan2552 2013年

6
@ Dan2552看起来像个错误,应该报告?
saeedgnu

23
看起来它首先将结果限制为5个条目,然后反转
nonopolarity 2014年

3
@太极者无极而生是对的,即已记录的行为。
严重dev '16



6

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

git log --pretty=oneline | wc -l

这给你一个数字

git log HEAD~<The number minus one>

1

git log --format="%h" | tail -10dd89fb通过执行类似的操作,为您提供提交哈希(即),您可以将其提交给其他命令

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.