如何引用最初的提交?
我有一个脚本需要引用存储库中的初始提交。 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
是一个更稳定的选项。