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

标签 git bash jenkins branch travis-ci

我可以通过执行以下任一操作找到当前的 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

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

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

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

好处是在单独的行中获取候选引用,没有额外的字符。

关于git - 如何在分离的 HEAD 状态下找到当前的 git 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059336/

相关文章:

java - 将 fragment 类传递到 addSlide 方法时需要表达式

java - 如何设置从 Red Hat BPM Suite 6.4 导入的 JBoss Dev Studio 项目来构建 Java

Git - 将提交从一个分支移动到另一个

git log - 查找上次使用的函数

bash - Laravel Envoy 和 bash 提示符

jenkins - 无法在 Github 多分支管道上按名称过滤

jenkins - 用于从 Jenkins 断开/重新连接从站的 Rest API

linux - sed 在多个空格的情况下搜索和替换

bash - sed:在文件最后一行的位置搜索和替换值

jenkins - jenkins 环境变量中的三元运算符