如何引用最初的提交?

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

这是我想要做的:

 git show TAIL 

这里有一个选项我有:

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

这是相当hacky,并取决于不改变的git日志的输出。

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

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

你的问题还有一个额外的问题:在存储库中可能存在多个这样的TAIL根提交(parentless commit)(即使我们在git.git中打断了不连贯的分支,比如'html','man'和'todo'库)。 这通常是将单独的项目合并为一个,或者使用单独开发的子项目的子树合并的结果。

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


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

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

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

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

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