繁体   English   中英

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

[英]How to show the first commit by 'git log'?

我有一个历史悠久的 Git 项目。 我想展示第一次提交。

我该怎么做呢?

我找到:

git log --reverse

显示从一开始的提交。

简短的回答

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 中最早日期的提交的日期早于libfoo.git中最早日期的提交bar.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

奖金

经常用这个? 难记? 添加 git 别名以便快速访问

git config --global alias.first "rev-list --max-parents=0 HEAD"

现在你可以简单地做

git first

您可以反转您的日志,然后将其用于第一个结果。

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

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

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' 显示第一次提交? (上面的第二条命令是我自己的贡献)
  2. 我从@Nyambaa的最受好评的答案中了解了git log --reverse --reverse

我猜这不是最漂亮的方法:

git log --pretty=oneline | wc -l

这会给你一个号码

git log HEAD~<The number minus one>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM