当前位置: 首页 > 面试题库 >

如何在分离的HEAD状态下找到当前的git分支

赵经国
2023-03-14
问题内容

通过执行以下任一操作,我可以找到当前的git分支名称:

git branch | awk '/^\*/ { print $2 }'
git describe --contains --all HEAD

但是,当处于分离的HEAD状态时,例如在Jenkins maven构建的后期构建阶段(或在Travis
git fetch中),这些命令将不起作用。

我当前的工作解决方案是这样的:

git show-ref | grep $(git log --pretty=%h -1) | sed 's|.*/\(.*\)|\1|' | sort -u | grep -v HEAD

它显示在HEAD提示上具有最后提交的任何分支名称。这可以正常工作,但我认为使用git-fu更强的人可能有更漂亮的解决方案?


问题答案:

更瓷器的方式:

git log -n 1 --pretty=%d HEAD

# or equivalently:
git show -s --pretty=%d HEAD

裁判将以格式列出(HEAD, master)-如果您打算在脚本中而不是供人类使用,则必须对其进行一些解析。

您还可以自己更干净地实现它:

git for-each-ref --format='%(objectname) %(refname:short)' refs/heads | awk "/^$(git rev-parse HEAD)/ {print \$2}"

这样做的好处是可以将候选引用放在单独的行中,而无需多余的字符。



 类似资料:
  • 我在我的存储库中做了一些工作,发现一个文件有本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做Git等效的 使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站 (

  • 我写了一个Jenkins管道,它克隆一个git存储库并运行一个MSBUILD构建。 我使用GitSCM将存储库克隆到工作区中,如下所示: 克隆回购协议的步骤完成后,HEAD指向一个分离的HEAD,我不明白为什么。 除此之外,众所周知,当运行詹金斯管道时,git参数没有正确评估,因此我不能通过简单地运行来修复它: 那么,在开始MSBUILD步骤之前,如何确保HEAD指向分支名称呢? 我相信已经有人遇

  • 问题内容: 我想找出当前时间之后10分钟的日期时间。假设我们有 我想找到这个,十分钟后。我怎样才能做到这一点? 问题答案: 。基本上,您只需要添加10分钟的时间增量即可获得所需的时间。

  • 问题内容: 我在存储库中做一些工作,发现文件有本地更改。我不再想要它们了,所以我删除了文件,以为我可以签出新副本。我想做相当于 使用git pull似乎没有用。一些随机搜索将我带到一个有人建议这样做的站点 (src是包含已删除文件的目录)。 现在我发现自己有一个超脱的头。我不知道那是什么。我该如何撤消? 问题答案: 分离的头部意味着您不再在分支上,您已签出历史记录中的单个提交(在这种情况下,是HE

  • 问题内容: 我试图编写一个简单的程序来显示不同键锁的当前状态,但是我无法找到关于如何在Python中获取它们的当前状态的解决方案。谢谢。 问题答案: └──> xset q | grep LED auto repeat: off key click percent: 0 LED mask: 00000000 └──> xset q | grep LED auto repeat: off key c

  • 我想在声明性Jenkins管道中使用git标记。我的詹金斯档案是这样的 但是环境变量总是空的。经过一些调查,我在Jenkins的日志中注意到这一点: 有没有办法告诉詹金斯跳过参数? 因为我事先不知道提交是如何标记的,所以我想从git中签出标签并将其用作变量。所以这个问题的解决方案在这里是不可行的。