如何引用初始提交?

问题描述 投票:115回答:2

我有一个脚本需要引用存储库中的初始提交。 git有特殊参考HEAD,但没有相应的TAIL。我在git help rev-parse找不到任何能帮助我的东西。

这是我想做的事情:

git show TAIL

这是我的一个选择:

git show `git log --reverse | if read a commit ; then echo $commit ; fi`

这非常hacky,取决于git log的输出没有改变。

现在我只标记初始提交并将其用作我的refspec。但是,我想发布一个通用工具,所以这不是一个很好的选择。

git git-commit
2个回答
135
投票

不要使用git-log进行脚本编写:使用git-rev-list或git-log和指定的自定义格式(“--format = <sth>”选项)。

您的问题还有一个问题:在存储库中可能存在多个这样的TAIL根提交(无父提交)(即使我们在git.git中对断开的分支进行折扣,例如'html','man'和'todo'库)。这通常是将单独的项目合并为一个,或者使用单独开发的子项目的子树合并的结果。

例如,git存储库有6个root提交:git-gui,gitk(子树合并),gitweb(合并,不再单独开发),git mail工具(在项目历史的早期合并)和p4-fast-export(也许意外)。这不包括'html和'man'分支的根源,包含预生成文档的“便利”分支,以及包含TODO列表和脚本的“todo”分支。


如果你有git 1.7.4.2或更新版本,你可以使用--max-parents选项:

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

否则,您可以使用以下命令获取当前分支可访问的所有无父(根)提交的列表:

$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

29
投票

git rev-list HEAD | tail -n 1是一个更稳定的选择。

© www.soinside.com 2019 - 2024. All rights reserved.