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