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

mbyulnm0  于 2022-12-10  发布在  Git
关注(0)|答案(8)|浏览(262)

我有一个历史悠久的Git项目。我想显示第一次提交。
我该怎么做?

jjhzyzn0

jjhzyzn01#

我发现:

git log --reverse

显示从开始提交。

ego6inou

ego6inou2#

简短回答

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

(from正如Chris Johnsen所注意到的,--max-parents是在这个答案发布后引入的。)

说明

从技术上讲,可能会有多个根提交。当多个以前独立的历史被合并在一起时,就会发生这种情况。当一个项目通过subtree merge集成时,这是很常见的。
git.git仓库的历史记录图中有6个根提交(Linus的初始提交、gitk、一些初始独立的工具 git-guigitwebgit-p4 各一个)。在本例中,我们知道e83c516是我们可能感兴趣的提交,它既是最早的提交,也是根提交。
在一般情况下就不是那么简单了。
假设 libfoo 已经开发了一段时间,并将其历史记录保存在Git存储库中(libfoo.git)。独立地,“bar”项目也在开发中(单位:bar.git),但时间不会像libfoo那么长(在libfoo.git中具有最早日期的提交具有在bar.git中具有最早日期的提交之前的日期)。我决定使用子树合并将 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
xbp102n0

xbp102n03#

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

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

qnyhuwrf4#

要查看仅第一次提交的提交哈希:

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

要查看完整的git log,以及提交消息,仅针对第一次提交:

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

要以相反的顺序查看所有git log消息,从顶部(而不是底部)的第一个提交到底部(而不是顶部)的最后一个(最近的)提交:

git log --reverse

参考文献:

1.我是如何学会上面的第一个命令的:[接受的答案]如何显示'git log'的首次提交?(上面的第二个命令是我自己的贡献)
1.我了解了git log --reversefrom the most-upvoted answer, by @Nyambaa

vu8f3i0k

vu8f3i0k5#

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

k0pti3hp6#

我想这不是最好的方式:

git log --pretty=oneline | wc -l

这会给你一个数字

git log HEAD~<The number minus one>
jxct1oxe

jxct1oxe7#

git log --format="%h" | tail -1为您提供提交哈希(即0dd89fb),您可以通过执行以下操作将其输入到其他命令中:
git diffgit log --format="%h" --after="1 day"| tail -1..HEAD查看前一天的所有提交。

utugiqy6

utugiqy68#

git log --max-parents=0

类似于已接受的答案,但格式更好。

相关问题