如何获取Git中当前分支的名称?
当前回答
这个呢?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
其他回答
要仅显示当前分支的名称,请执行以下操作:
git rev-parse --abbrev-ref HEAD
参考:仅显示Git中的当前分支
我一直在与CircleCI和git标签斗争,这就是我最终的结果:
if [[ -n $(git branch --show-current) ]]; then
git branch --show-current
else
git branch -a --contains $(git rev-parse --short HEAD) \
| sed '/HEAD/d' \
| sed 's/remotes\/origin\///g' \
| sed 's/\*//g' | sed 's/ *//g' \
| awk '!_[$0]++'
fi
虽然有点难看,但确实如此
常规提交的工作:它只使用git的--show current标志,如果有效,我们就不需要再多看了;本地和CI容器上标记的工作:当头部分离时,它将获得远程分支名称。
注意事项:
只要标记的提交只出现在一个分支上,这就可以正常工作。因此,如果您通常合并到dev,并从那里通过转移到生产,那么来自dev的原始提交将出现在所有三个分支上,从而破坏代码。但只要您只标记合并/PR提交这需要预先运行git fetch-a,因为CI只会检出默认的分支和标记的提交,所以如果正确的分支都不是,它将无法工作
更多解释:
我想获得分支名称,即使CI构建是由标记触发的。在这种情况下,没有设置CircleCI pipeline.git.branch变量,也无法在头部分离时从git中轻松获取分支名称(正如许多其他问题中所指出的)。这意味着grepping当前分支(使用*前缀)也不能像在CI上那样工作,当前分支将是分离的头部分支。其想法是获取包含此提交的所有分支(包括远程分支);然后删除分离的head结果,去掉所有不是实际分支名称的位并消除重复
git branch -l
这将列出所有本地分支机构,当前分支机构以绿色标记并打印
如果在分支上,则仅显示当前分支的名称,但如果分离,则打印当前提交id:
git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --short HEAD
如果分离,第一部分将返回错误,第二部分将始终打印当前提交id。
git状态的噪音较小的版本会起作用
git status -bsuno
它打印出来
## branch-name
推荐文章
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?
- 我如何迫使git拉覆盖每一个拉上的一切?
- 撤销“git add <dir>”?
- 是否可以在不先签出整个存储库的情况下进行稀疏签出?
- 如何移除SSH密钥?