【发布时间】:2014-09-02 14:01:58
【问题描述】:
在移动HEAD(如checkout、reset等)的操作之后,您总是可以通过运行获得HEAD在该操作之前指向的提交ID,例如,
git rev-parse @{1}
不过,我感兴趣的是获取HEAD 最后指向的引用(如果有)的名称。这是一个说明我想要什么的例子。假设我的仓库如下所示:
然后我通过运行检查develop 分支
git checkout develop
最终得到
在最后一次结帐操作之前,我如何从我的 repo 的内脏中检索 HEAD 指向 master 的信息?
This answer 建议使用awk 从引用日志中提取名称;例如,与
git reflog -1 | awk '{ print $6; exit }'
据我所知,这已经足够好了。它甚至会打印上一次提交的 SHA,以防 HEAD 在上次结帐之前被分离。
但是,OP 在his comment 中提出了对健壮性和向后兼容性的担忧:
我将此答案标记为正确(从技术上讲是正确的),因为需要更清洁的方法。但是,我不相信将字符串的格式硬编码到 Git 的源代码中是一件好事,因为这意味着它可能会意外中断(即在更高版本的 Git 中)。
OP 的担忧是否合理?最可靠的方法是什么?
【问题讨论】:
-
我不能说出你问题的主要观点,但永远不要这样做
cmd | head -1 | awk '{ print $6 }',因为 awk 完全能够在没有额外中间头和管道的情况下仅在文件的第一行上运行:cmd | awk 'NR==1{ print $6; exit }'. -
@EdMorton 谢谢 Ed。我对
awk还不是很熟悉。我将编辑我的问题。 -
这里有一个额外的细节,
git-reflog完全能够将其自己的输出限制为单行。git reflog -1. -
@EtanReisner 你是对的。傻我。