- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在移动 HEAD
的操作之后(如 checkout
、 reset
等),你总能得到 HEAD
的提交 ID通过运行指向该操作之前,例如,
git rev-parse @{1}
不过,我感兴趣的是获取 HEAD
的引用(如果有)的名称最后指出。这是一个说明我想要什么的例子。假设我的 repo 协议(protocol)如下所示:
然后我查看 develop
运行分支
git checkout develop
最后是
如何从我的存储库的内部检索信息,即 HEAD
指着master
,在最后一次 checkout 操作之前?
This answer建议使用 awk
从 reflog 中提取名称作为一种可能性;例如,用
git reflog -1 | awk '{ print $6; exit }'
据我所知,这已经足够好了。它甚至会打印上一次提交的 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/
在git中,以下有什么区别? 头 头^ HEAD~1 HEAD~2 它们与 master 有什么关系?那么有没有MASTER^, MASTER~1?? 最佳答案 HEAD 是当前分支上最新提交的同义词
我想实现一个 LinkedListremove 方法,该方法可以删除任何特定位置的项目,但在本例中,我最感兴趣的是删除列表开头(第 0 个位置)的项目。 我的代码适用于 n 大于零的值,因此我为 n=
的顺序有什么关系吗?或 或 标签位于 中? (愚蠢的问题,但其中一件事我直到现在才考虑过。) 最佳答案 优化 据 Yahoo! 的人说你应该put CSS at the top和 scripts
HEAD 是指向当前分支的指针。我见过 HEAD 祖先的各种符号,包括 HEAD~2 HEAD^2 HEAD@{2} 头~~ 头^^ 以上每一项到底是什么意思?这方面的文件在哪里? 最佳答案 来自文档
我对 git 很陌生,任何人都可以帮助我。 我实际上被困在什么是“git diff HEAD”。 “git diff HEAD”和“git diff HEAD HEAD~1”有什么区别 最佳答案 gi
我似乎不知道如何获得 git_reference *到特定 Remote 的 HEAD。 我有: git_repository * repo = NULL; git_reference * ref
关于 firefox浏览器控制台,我可以访问 容器如下所示。 > window [object Window] > documentObject = window["document"
我使用 asp.net 4 和 c#。 我在 Web From 页面中有一个 Web 用户控件。当我包含 Web 用户控件时,我还想以编程方式在最终生成的页面的标记中包含一些脚本。 知道怎么做吗?也许
这可能是一个非常愚蠢的问题,但是加载文件中标签之间的数据并通过 PHP include() 加载它是愚蠢的吗?这样就可以更轻松地进行编辑。谢谢。 最佳答案 不,这不会是愚蠢的。代码重复越少越好。 关于
我编写了以下 facelet index.xhtml: 当我从浏览器获取
我有一个不断递增的“指针”,我需要最终返回指针的“头”。我进退两难,要么使用“pointer[0]”,要么使用另一个名为“head”的变量并初始化它并在最后返回。我觉得前者使代码看起来很脏,后来占用的
git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME_PRODUCTION.git HEAD 和 git pu
当我像这样将 Git 子模块添加到 Git 存储库时, git submodule add ssh://server/proj1/ proj1 git submodule init git submo
我的本地存储库中有一个我不打算推送的提交(A)。现在,HEAD 在 A 处。假设我想在提交 (A) 之上创建另一个提交 (B) NOT,但在前一个提交之上而不是提交 (A)。 如何在不丢失最新
多次调用 head.load 是否同步? 我的意思是,如果我们有这样的代码: head.load('scr1.js',...,'scr8.js'); head.load('scr11.js',...,
执行以下查询时出现以下错误: #1054 - Unknown column 'headings.heading' in 'field list' 标题表中肯定有一个名为“标题”的列。当我测试它时,问题
我试图显示上次提交与之前提交之间的差异: git diff HEAD^ HEAD 但是什么都不显示。事实上,我知道这两个提交之间存在差异。 我做错了什么,我应该如何改正? P.S.:我觉得这个问题以
这就是场景。我有一个运行一些测试的脚本。我需要制作另一个接受 git 提交名称作为参数的脚本,然后执行以下操作: 保存当前提交状态 - 分支名称或未命名提交。 在指定提交时切换到分离的 HEAD 针对
我发现自己经常输入这个,比如当我做了一些改变,提交它,然后要么需要查找我在那里做的事情来弄清楚下一步该做什么,要么确保我没有添加任何意外的东西在将其推送到远程之前提交。 无可否认,diff HEAD^
我是否理解正确,Git head(小写)和 Git HEAD(大写)的区别在于前者是结束提交,后者只是当前提交(无论是最终提交还是非最终提交被选为 HEAD 提交)? 编辑:“结束提交”是指“给定分支
我是一名优秀的程序员,十分优秀!