[英]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-gui 、 gitweb和git-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
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.