我有一个脚本需要引用仓库中的初始提交。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。然而,我想发布一个通用工具,所以这不是一个很好的选择。
6条答案
按热度按时间pgccezyw1#
不要使用git-log编写脚本:使用
git-rev-list
或指定自定义格式的git-log
(--format=*<sth>*
选项)。您的问题还有其他问题:仓库中可以存在多个这样的TAIL根提交(无父提交)(即使我们忽略不连接的分支,如git.git仓库中的'html','man'和'todo')。这通常是将单独的项目合并为一个项目,或使用单独开发的子项目的子树合并的结果。
例如,git仓库有6个根提交:git-gui,gitk(subtree-merged),gitweb(merged in,不再单独开发),git mail tools(在项目历史早期就合并了),p4-fast-export(可能是偶然的).这还不包括'html和'man'分支的根,包含预生成文档的“convenience”分支,以及包含TODO列表和脚本的'todo'分支.
如果你有git 1.7.4.2或更新版本,你可以使用
--max-parents
选项:否则,您可以使用以下命令获取当前分支可访问的所有无父(根)提交的列表:
6gpjuf902#
git rev-list HEAD | tail -n 1
是更稳定的选项。6jygbczu3#
不知道你想在这里做什么,但是有些git命令会把
--root
作为一个选项,以便引用提交树的根,例如:tjvv9vkg4#
假设合并的第一个父代是开发的主线:
rjjhvcjd5#
考虑到可能有多个初始提交(孤立提交),但这些提交仍然可以从任何一个引用访问,因此可以用途:
或
但是如果需要查找根提交,包括不可达的根提交,可以使用
git fsck
:--no-dangling
选项会抑制有关悬空提交的警告消息,从而更容易处理脚本中的输出。c9qzyr3d6#
要获得仓库上的第一个提交,请运行以下命令: