如何在Git中获取当前分支的名称?
git branch
应该显示您的存储库的所有本地分支。星形分支是您的当前分支。
要仅检索您所在分支的名称:
git rev-parse --abbrev-ref HEAD
或使用Git 2.22及更高版本:
git branch --show-current
您可以在Linux的存储库目录中输入命令行(控制台):
$ git status
您将看到一些文本,其中类似于:
...On branch master...
这意味着您当前位于master分支。如果您正在编辑任何文件,并且它位于同一本地存储库(包含Git版本控制管理下的文件的本地目录)中,则您正在编辑此分支中的文件。
master
为什么不使用git感知shell提示符,它会告诉你当前分支的名称?git status也有帮助。
git status
contrib/中的git-prompt.sh是如何做到的(git版本2.3.0),如__git_ps1帮助函数中定义的:
contrib/
__git_ps1
首先,如果检测到正在进行的rebase,则有特殊情况。Git在rebase过程中使用未命名分支(分离的HEAD)使其成为原子分支,原始分支保存在其他地方。
如果.git/HEAD文件是符号链接(一种非常罕见的情况,来自Git的古老历史),它使用git symbolic-ref HEAD 2>/dev/null
.git/HEAD
git symbolic-ref HEAD 2>/dev/null
否则,它读取.git/HEAD文件。下一步取决于其内容:
如果此文件不存在,则没有当前分支。如果存储库是裸的,通常会发生这种情况。
如果它以'ref: '前缀开头,那么.git/HEAD是Symref(符号引用),我们在普通分支上。去掉这个前缀以获取全名,去掉refs/heads/以获取当前分支的短名称:
'ref: '
refs/heads/
b="${head#ref: }"# ...b=${b##refs/heads/}
If it doesn't start with 'ref: ', then it is detached HEAD (anonymous branch), pointing directly to some commit. Use git describe ... to write the current commit in human-readable form.
git describe ...
I hope that helps.
#!/bin/bashfunction git.branch {br=`git branch | grep "*"`echo ${br/* /}}git.branch
很简单,我把它放在一个衬里(bash)
git branch | sed -n '/\* /s///p'
(图片来源:Limited Atonement)
当我在那里的时候,一个班轮得到远程跟踪分支(如果有的话)
git rev-parse --symbolic-full-name --abbrev-ref @{u}
您还有git symbolic-ref HEAD,它显示完整的refspec。
git symbolic-ref HEAD
在Git v1.8及更高版本中仅显示分支名称(感谢Greg指出这一点):
git symbolic-ref --short HEAD
在Git v1.7+上,您还可以执行以下操作:
如果你在一个分支上,两者应该给出相同的分支名称。如果你在一个分离的头上,答案就不同了。
注:在早期的客户端上,这似乎有效:git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"-Darien 26. Mar 2014
注:
在早期的客户端上,这似乎有效:
git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
-Darien 26. Mar 2014
在NetBeans中,确保启用版本控制注释(查看->显示版本控制标签)。然后您可以在项目名称旁边看到分支名称。
http://netbeans.org/bugzilla/show_bug.cgi?id=213582
要显示只有您所在的当前分支的名称:
参考:在Git中只显示当前分支
这个怎么样?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy
将结果直接复制到粘贴板。感谢@olivier-refalo的开始…
git symbolic-ref -q --short HEAD
我在需要当前分支名称的脚本中使用它。它将向您显示当前对HEAD的简短符号引用,这将是您当前的分支名称。
为了我自己的参考(但它可能对其他人有用),我概述了本线程中提到的大多数(基本命令行)技术,每个技术都应用于几个用例:HEAD是(指向):
结果:
(detached from origin/master)
(detached from origin/feature-foo)
(detached from v1.2.3)
(HEAD detached at 285f294)
(detached from 285f294)
git status | head -1
# On branch master
# HEAD detached at origin/master
# HEAD detached at origin/feature-foo
# HEAD detached at v1.2.3
# HEAD detached at 285f294
git describe --all
heads/master
remotes/origin/master
remotes/origin/feature-foo
v1.2.3
remotes/origin/HEAD
v1.0.6-5-g2393761
cat .git/HEAD
ref: refs/heads/master
cat: .git/HEAD: Not a directory
HEAD
fatal: ref HEAD is not a symbolic ref
(仅供参考,这是用git版本1.8.3.1完成的)
找到一个与奥利弗·雷法罗的相同长度的命令行解决方案,使用良好的ol'awk:
git branch | awk '/^\*/{print $2}'
awk读作“在与正则表达式匹配的行上执行{}中的操作”。默认情况下,它假定以空格分隔的字段,因此您打印第二个。如果您可以假设只有带有分支的行具有*,您可以删除^。啊,bash高尔夫!
awk
{}
如果您在Jenkins中运行,您可以使用GIT_BRANCH变量,如下所示:https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
git插件设置了几个可以在脚本中使用的环境变量:
GIT_COMMIT-当前的SHA
GIT_BRANCH-当前正在使用的分支的名称,例如“master”或“来源/foo”
GIT_PREVIOUS_COMMIT-来自同一分支的前一个构建提交的SHA(分支中第一个构建的当前SHA)
GIT_URL-存储库远程URL
GIT_URL_N-有超过1个远程地址时的存储库远程URL,例如GIT_URL_1,GIT_URL_2
GIT_AUTHOR_EMAIL-投稿人/作者邮箱
GIT_COMMITTER_EMAIL-投稿人/作者邮箱
随着时间的推移,我们可能会有一个很长的分支列表。
虽然其他一些解决方案很棒,但以下是我所做的(从雅各布的回答中简化):
git branch | grep \*
现在,
工作,但是只有如果有任何局部更改
如果您真的希望最后一个分支/标记也在分离的HEAD状态下签出。
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
更新如果你有并且不害怕awk,这会更好。
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
我知道这很晚了,但在linux/mac上,您可以从终端使用以下内容。
git status | sed -n 1p
说明:
获取工作树状态Sed-n 1p->从状态体获取第一行
对上述命令的响应如下所示:
"On branch your_branch_name"
还有一个选择:
git name-rev --name-only HEAD
抱歉,这是另一个命令行答案,但当我发现这个问题时,这就是我正在寻找的,其中许多答案都很有帮助。我的解决方案是以下bash shell函数:
get_branch () {git rev-parse --abbrev-ref HEAD | grep -v HEAD || \git describe --exact-match HEAD 2> /dev/null || \git rev-parse HEAD}
这应该总是给我一些既可读又可直接用作git checkout参数的东西。
git checkout
feature/HS-0001
v3.29.5
我有一个名为git-cbr(当前分支)的简单脚本,它打印出当前分支名称。
git-cbr
#!/bin/bash git branch | grep -e "^*"
我把这个脚本放在一个自定义文件夹(~/.bin)中。该文件夹在$PATH中。
~/.bin
$PATH
所以现在当我在git repo中时,我只需键入git cbr即可打印出当前分支名称。
git cbr
$ git cbr* master
这之所以有效,是因为git命令采用其第一个参数并尝试运行名为git-arg1的脚本。例如,git branch尝试运行名为git-branch的脚本等。
git
git-arg1
git-branch
git branch | grep -e "^*" | cut -d' ' -f 2
将只显示分支名称
使用早期的想法;假设sha1是40个字符;并追逐引用(是的,应该删除调试打印行:-):
git reflog | awk '$3 == "checkout:" && (sha == "" || sha == $1 ) {from=$(NF - 2)to=$NFprint from, to, length(from) > "/dev/stderr"if (length(from) != 40) { print from ; exit; }sha=substr(from, 1, 7)print sha > "/dev/stderr"}'
给出原始输出:
$ git statusHEAD detached at 147049c[...]$ ./gime-branch.sha47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40a47be8dmaster HEAD^ 6master
您可以永久设置bash输出以显示您的git分支名称。当您使用不同的分支时,它非常方便,无需一直键入$ git status。github repogit-awating-提示.
打开您的终端(ctrl-alt-t)并输入命令
mkdir ~/.bashcd ~/.bashgit clone git://github.com/jimeh/git-aware-prompt.git
使用sudo nano ~/.bashrc命令编辑您的. bashrc(用于Ubuntu)并将以下内容添加到顶部:
sudo nano ~/.bashrc
export GITAWAREPROMPT=~/.bash/git-aware-promptsource "${GITAWAREPROMPT}/main.sh"
然后粘贴代码
export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "
在您之前粘贴安装代码的同一文件末尾。这将为您提供彩色输出:
使用Mac将其添加到PS1:
PS1
PS1='\W@\u >`[ -d .git ] && git branch | grep ^*|cut -d" " -f2`> $ '
在运行上面的命令之前:
运行该命令后:
不要担心,如果它不是GIT存储库,它不会显示错误,因为[-d .git]检查.git文件夹是否存在。
[-d .git]
.git
以下shell命令告诉您当前所在的分支。
git branch | grep ^\*
当你不想每次想知道分支并且使用Bash时都键入那个长命令时,给命令一个短别名,例如别名cb,就像这样。
cb
alias cb='git branch | grep ^\*'
当您处于分支主机并且您的提示符为$时,您将获得* master,如下所示。
$
* master
$ cb* master
您可以在工作目录上使用git bash命令如下
git status -b
它会告诉你你在哪个分支上有许多有用的命令,其中一些是
-s
短以短格式输出。
-b--分支以短格式显示分支和跟踪信息。
--瓷器[=]以易于解析的脚本格式提供输出。这类似于短输出,但无论用户配置如何,都将在Git版本中保持稳定。详情见下文。
version参数用于指定格式版本。这是可选的,默认为原始版本v1格式。
--long以长格式给出输出。这是默认的。
-v--冗长除了已更改的文件名外,还显示要提交的暂存文本更改(即,像git diff--cache的输出)。如果指定两次-v,则还显示工作树中尚未暂存的更改(即,像git diff的输出)。
在分离的头部时返回分支名称或SHA1:
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
这是@dmaestro12答案的简短版本,没有标签支持。
简单地,将以下行添加到您的~/.bash_profile:
~/.bash_profile
branch_show() {git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'}export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(branch_show)\[\033[00m\] $ "
通过这种方式,您可以在终端中拥有当前分支名称
感谢Coderwall.com
还将给出分支名称以及更改。
e. g.
>git statusOn branch master // <-- branch name here.....
我建议使用这两个命令中的任何一个。
或
git status | sed -n 1p | cut -d' ' -f 3
或(更详细)
git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p
一个不那么嘈杂的git状态版本就可以了
git status -bsuno
它会打印出来
## branch-name
git branch仅显示当前分支名称。
虽然git分支将向您显示所有分支并用星号突出显示当前分支,但在使用大量分支时它可能太麻烦了。
要仅显示您当前所在的分支,请使用:
我知道这已经被回答了,但是在Git的最新版本中,命令git branch在某种提示中打开了您的分支列表,您必须退出。这让我很恼火!
这是我的补丁:打开您的bash配置文件并输入:
#!/bin/bashgit() {if [[ $@ == "branch" ]] thencommand git branch -a | grep -v 'remotes'elsecommand git "$@"fi}
现在打开终端并通过在git存储库中键入以下命令进行测试:
source ~/.zshrcgit branch
瞧!您的终端中打印出您当地分支机构的列表。
您正在写入bashrc文件的代码覆盖了git branch的默认函数,并将其替换为一个更长的命令,该命令通过-a参数列出了所有本地分支。然后我们grep取出额外的不需要的业务并打印出来。如果您排除grep命令,您仍然会得到烦人的提示。如果您不熟悉编写bash命令,请查看以下解释:关于.bash_profile,. bashrc,以及别名应该写在哪里?
-a
grep
使用git branch --contains HEAD | tail -1 | xargs它也适用于“分离的HEAD”状态。
git branch --contains HEAD | tail -1 | xargs
您可以使用单个grep指令执行此操作,使用Perl模式和\K重置匹配缓冲区,因此您只能获得分支名称。
\K
$ git branch | grep -oP "^\*\s+\K\S+$"master
从git的2.22版开始,您可以使用:
根据手册页:
打印当前分支的名称。在分离的HEAD状态下,不打印任何内容。
您还可以在当前项目的. git目录中看到当前分支的名称。
终端中键入命令:打开. git/HEAD输出文件包含当前分支的名称
如果您的CI服务器没有带有分支名称的环境变量,并且您有一个容器内没有git二进制文件的dockerized构建,您可以使用:
cat .git/HEAD | awk -F '/' '{print $NF}'
我会尝试以下方法之一:
1.>git符号化引用
git symbolic-ref --short HEAD>>> sid-dev
2.>git分支
git branch --show-current>>> sid-dev
3.>git name-rev-name-Only HEAD
git name-rev –name-only HEAD>>> HEAD sid-dev
备注:
1.>git符号化引用显示对当前分支的HEAD的简短符号引用。这是当前分支的名称。
2.>#删除当前的git分支也是打印当前分支名称的简单有效的方法。
3.>git name-rev-Only HEAD相关链接给出了当前分支的HEAD修订版的符号名称
4.>在上面的例子中,sid-dev是我的分支的名称。
sid-dev
要在git use中获取当前分支,
有多种方法可以检查Git的当前分支,但我更喜欢:
Git
git branch --show
即使git branch也会显示当前分支名称以及所有现有分支名称列表。
在Shell上,您可以执行以下操作
git branch | grep '*'
我一直在与CircleCI和git标签作斗争,这就是我最终得到的:
if [[ -n $(git branch --show-current) ]]; thengit branch --show-currentelsegit 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
虽然有点难看,但确实如此
--show-current
注意事项:
dev
staging
production
git fetch -a
更多解释:
pipeline.git.branch
*
一个简单的黑客可以
git branch|grep "*"
输出:
* <current branch>
编辑:
了解当前分支的另一种方法
git status|head -1On branch <current branch name>
在终端中写入以下命令:
或在Git 2.22及更高版本上:
git log
此命令将在顶部显示当前分支名称的提交列表。
如果在分支上,只需当前分支的名称,但如果分离,则打印当前提交ID:
git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --short HEAD
如果分离,第一部分将返回错误,第二部分将始终打印当前提交ID。
git branch -l
这将列出你所有的本地分支,你当前的分支被盯着并打印成绿色