我有一个历史悠久的项目。我想在git上显示第一个提交。
我该怎么做?
答案 0 :(得分:361)
我发现:
git log --reverse
显示从开始提交。
答案 1 :(得分:232)
git rev-list --max-parents=0 HEAD
(来自tiho's comment。作为Chris Johnsen notices,在发布此答案后引入了--max-parents
。)
从技术上讲,可能有多个root提交。当多个先前独立的历史被合并在一起时,会发生这种情况。通过subtree merge集成项目时很常见。
git.git
存储库在其历史记录图中有六个根提交(一个用于Linus的初始提交, gitk ,一些最初是单独的工具, git-gui , gitweb 和 git-p4 )。在这种情况下,我们知道e83c516
是我们可能感兴趣的。它是最早的提交和根提交。
一般情况下并非如此简单。
想象一下, libfoo 已经开发了一段时间,并将其历史保存在Git存储库(libfoo.git
)中。独立地,“bar”项目也在开发中(在bar.git
),但不是很长的 libfoo (libfoo.git
中最早的日期提交有一个日期在提交之前,bar.git
)中的最早日期。在某些时候,“bar”的开发人员决定通过使用子树合并将 libfoo 合并到他们的项目中。在此合并之前,确定bar.git
中的“第一个”提交可能是微不足道的(可能只有一个根提交)。但是,在合并之后,有多个root提交,最早的root提交实际上来自 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
答案 2 :(得分:27)
你可以撤消你的日志,然后把它作为第一个结果。
git log --pretty=oneline --reverse | head -1
答案 3 :(得分:10)
git log $(git log --pretty=format:%H|tail -1)
答案 4 :(得分:4)
我猜这不是最美妙的方式:
git log --pretty=oneline | wc -l
这会给你一个数字
git log HEAD~<The number minus one>
答案 5 :(得分:0)
git log --format="%h" | tail -1
为您提供提交哈希(即0dd89fb
),您可以通过执行
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD
查看过去一天的所有提交。