Bry*_*sen 122 git git-commit
我有一个脚本需要引用存储库中的初始提交.git有特殊的参考HEAD,但没有相应的TAIL.我找不到任何git help rev-parse可以帮助我的东西.
这是我想做的事情:
git show TAIL
Run Code Online (Sandbox Code Playgroud)
这是我的一个选择:
git show `git log --reverse | if read a commit ; then echo $commit ; fi`
Run Code Online (Sandbox Code Playgroud)
这非常hacky,取决于git log的输出没有改变.
现在我只标记初始提交并将其用作我的refspec.但是,我想发布一个通用工具,所以这不是一个很好的选择.
Jak*_*ski 141
不要使用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 rev-list --max-parents=0 HEAD
Run Code Online (Sandbox Code Playgroud)
如果你有git 1.7.4.2或更新版本,你可以使用新git-rev-list选项:
$ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Run Code Online (Sandbox Code Playgroud)
Rob*_*anu 32
git rev-list HEAD | tail -n 1 是一个更稳定的选择.
Cla*_*ges 13
不确定你想在这里做什么,但一些 git 命令作为--root一个选项,以便引用提交树的根,例如
git rebase --interactive --root main
Run Code Online (Sandbox Code Playgroud)
小智 7
假设合并的第一个父级是开发的主线:
git rev-list --reverse --topo-order --first-parent HEAD | sed 1q
Run Code Online (Sandbox Code Playgroud)