如何引用初始提交?

时间:2009-06-17 12:43:36

标签: git git-commit

我有一个需要在存储库中引用初始提交的脚本。 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。但是,我想发布一个通用工具,所以这不是一个很好的选择。

4 个答案:

答案 0 :(得分:131)

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

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

例如git repository有6个root提交:git-gui,gitk(子树合并),gitweb(合并,不再单独开发),git mail工具(在项目历史的早期合并)和p4-fast - 出口(也许是偶然的)。这不包括'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}$"

答案 1 :(得分:28)

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

答案 2 :(得分:2)

不确定您要在这里做什么,但是某些git命令将--root作为选项,以引用提交树的根,例如

git rebase --interactive --root main

答案 3 :(得分:2)

假设合并的第一个父级是开发的主线:

git rev-list --reverse --topo-order --first-parent HEAD | sed 1q