如何获取Git中当前分支的名称?
当前回答
我知道这很晚了,但在linux/mac上,从终端可以使用以下命令。
git status | sed -n 1p
说明:
gitstatus->获取工作树状态sed-n 1p->从状态体获取第一行
对上述命令的响应如下:
"On branch your_branch_name"
其他回答
我一直在与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结果,去掉所有不是实际分支名称的位并消除重复
找到了一个与Oliver Refalo相同长度的命令行解决方案,使用了良好的ol‘awk:
git branch | awk '/^\*/{print $2}'
awk将其理解为“在与正则表达式匹配的行上执行{}中的内容”。默认情况下,它采用空格分隔的字段,因此您可以打印第二个。如果假设只有分支所在的行具有*,则可以删除^。啊,打高尔夫!
在Netbeans中,确保启用了版本控制注释(查看->显示版本控制标签)。然后,您可以看到项目名称旁边的分支名称。
http://netbeans.org/bugzilla/show_bug.cgi?id=213582
如果CI服务器没有带有分支名称的环境变量,并且容器内部没有git二进制文件,则可以使用:
cat.git/HEAD|awk-F'/'“{print$NF}”
我有一个名为gitcbr(当前分支)的简单脚本,它打印出当前分支的名称。
#!/bin/bash
git branch | grep -e "^*"
我将此脚本放在一个自定义文件夹(~/.bin)中。该文件夹位于$PATH中。
所以现在,当我在git repo中时,我只需键入git cbr即可打印出当前的分行名称。
$ git cbr
* master
这是因为git命令接受其第一个参数,并尝试运行名为git-arg1的脚本。例如,gitbranch尝试运行名为gitbranch等的脚本。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式