如何显示第一次提交'git log'?
我有一个历史悠久的项目。 我想在git上显示第一个提交。
我该怎么做呢?
简短的回答
git rev-list --max-parents=0 HEAD
(来自tiho的评论 ,正如克里斯·约翰森注意到的那样 ,在这个答案发布之后, --max-parents
被介绍了。)
说明
从技术上讲,可能有多个根提交。 当多个先前独立的历史合并在一起时,会发生这种情况。 当一个项目通过子树合并进行集成时很常见。
git.git
仓库在其历史logging图中有六个根提交(每个用于Linus的初始提交, gitk ,一些最初分离的工具, git-gui , gitweb和git-p4 )。 在这种情况下,我们知道e83c516
是我们可能感兴趣的那个,它是最早的提交和根提交。
一般情况下并不那么简单。
想象一下, libfoo已经开发了一段时间,并保存在Git仓库( libfoo.git
)中。 独立地,“bar”项目也正在开发中(在bar.git
),但是没有这么长时间的libfoo ( libfoo.git中最早的提交date在提交之前的最早date为bar.git
)。 在某些时候,“bar”的开发者通过使用子树合并决定将libfoo合并到他们的项目中。 在合并之前,确定bar.git
的“第一个”提交可能是微不足道的(可能只有一个根提交)。 然而,合并之后,有多个根提交,最早的根提交实际上来自libfoo的历史,而不是“bar”。
你可以find历史DAG的所有根提交:
git rev-list --max-parents=0 HEAD
为了logging,如果--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
我find:
git log --reverse
从开始显示提交。
你可以扭转你的很多,只是第一个结果尾巴。
git log --pretty=oneline --reverse | head -1
git log $(git log --pretty=format:%H|tail -1)
不是最美丽的做法我猜:
git log --pretty=oneline | wc -l
这给你一个数字
git log HEAD~<The number minus one>
@MHC实际上是:
git log --pretty=oneline | wc -l git log HEAD~<the number minus TWO>