繁体   English   中英

如何引用初始提交?

[英]How to reference the initial commit?

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

这是我想做的:

git show TAIL

这是我的一个选择:

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

这很老套,取决于 git 日志的 output 没有改变。

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

不要使用 git-log 编写脚本:使用git-rev-list或具有指定自定义格式git-log (--format --format=*<sth>*选项)。

您的问题还有其他问题:存储库中可能存在多个这样的 TAIL 根提交(无父提交)(即使我们不考虑断开连接的分支,例如 git.git 存储库中的“html”、“man”和“todo”) . 这通常是将单独的项目合并为一个,或使用单独开发的子项目的子树合并的结果。

例如 git 仓库有 6 个根提交:git-gui、gitk(子树合并)、gitweb(合并,不再单独开发)、git 邮件工具(在项目历史中很早就合并)和 p4-fast-export(也许是偶然的)。 这还不包括“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}$"

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

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

git rebase --interactive --root main

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

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

考虑到可能有多个初始(孤儿)但这些提交仍然可以从任何可以使用的引用中访问:

git rev-list --all --max-parents=0

要么

git rev-list --reflog --max-parents=0

但是,如果需要查找根提交,包括不可访问的提交,则可以使用git fsck

git fsck --root --no-dangling

--no-dangling选项会抑制有关悬空提交的警告消息,从而更容易在脚本中处理 output。

要在存储库上进行首次提交,请运行以下命令:

 git rev-list --oneline HEAD | tail -n 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM