一尘不染

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

jenkins

通过执行以下任一操作,我可以找到当前的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更强的人可能有更漂亮的解决方案?


阅读 577

收藏
2020-07-25

共1个答案

一尘不染

更瓷器的方式:

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}"

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

2020-07-25