gpt4 book ai didi

git - 获取 HEAD 最后指向的引用名称的最可靠方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 14:46:13 25 4
gpt4 key购买 nike

在移动 HEAD 的操作之后(如 checkoutreset 等),你总能得到 HEAD 的提交 ID通过运行指向该操作之前,例如,

git rev-parse @{1}

不过,我感兴趣的是获取 HEAD 的引用(如果有)的名称最后指出。这是一个说明我想要什么的例子。假设我的 repo 协议(protocol)如下所示:

enter image description here

然后我查看 develop运行分支

git checkout develop

最后是

enter image description here

如何从我的存储库的内部检索信息,即 HEAD指着master ,在最后一次 checkout 操作之前?

This answer建议使用 awk 从 reflog 中提取名称作为一种可能性;例如,用

git reflog -1 | awk '{ print $6; exit }'

(感谢 EdEtan 的建议)。

据我所知,这已经足够好了。它甚至会打印上一次提交的 SHA,以防 HEAD在上次 checkout 前分离。

但是,OP 在 his comment 中提出了对稳健性和向后兼容性的担忧:

I am marking this answer as correct (which it is, technically), for want of a cleaner approach. However, I am not convinced that the string's format being hard-coded into Git's source code is a good thing, as it means it could break unexpectedly (i.e. in a later version of Git).

OP 的担忧是否合理?最可靠的方法是什么?

最佳答案

在一些快速测试中,这似乎工作得相当好(尽管测试根本不彻底​​或对奇怪的场景有压力):

git rev-parse --symbolic-full-name @{-1}

我正在对@EmilDavtyan 的回答发表评论说多重引用问题是有问题的,因为我认为 git 不关心(因此不跟踪)HEAD 的最后位置 ref 但后来我想起了 @{-1} 以及如果它无法处理这种情况,它的用处将大大减少,因此经过快速测试后,它似乎以某种方式起作用(就我所知,它很可能正在解析 reflog 中的消息)。

我还应该指出,链接的 OP 是正确的,手动解析 reflog 是不可靠的。事实上,当我在这里测试 awk 片段时,我没有得到正确的结果。事实证明这是因为我默认打开了 --decorate ,这会用额外的字段填充行并丢弃计数。

关于git - 获取 HEAD 最后指向的引用名称的最可靠方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25625322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com