如何在Git中获取当前分支的名称?
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
git.branch
git status
将同时给出更改所在的分支名称。
例如:
>git status
On branch master // <-- branch name here
.....
随着时间的推移,我们可能会拥有一个非常长的分支列表。
尽管其他解决方案也很好,但这是我采取的方法(简化自Jacob的答案):
git branch | grep \*
现在,git status
只有在存在本地更改的情况下才有效
我建议使用以下两个命令之一。
git branch | grep -e "^*" | cut -d' ' -f 2
或者
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 symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
symbolic-ref
部分不也需要 --short
来避免在分支名称前加上 refs/heads/
前缀吗? - rjpgit branch | grep ^\*
当您不想每次都键入那个冗长的命令以了解分支时,并且正在使用Bash时,请给该命令取一个简短的别名,例如alias cb
。
alias cb='git branch | grep ^\*'
当您在主分支(master)中且提示符为$
时,您将得到以下内容:* master
。
$ cb
* master
git branch | grep '^\*'
。 - aaaarrghgit branch | grep ^\* | awk '{print $2}'
。 - aaaarrgh你可以永久地设置bash输出以显示git分支名称。当你使用不同的分支工作时,这非常方便,无需一直键入$ git status
。
Github repo git-aware-prompt 。
打开终端(ctrl-alt-t)并输入以下命令:
mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git
使用sudo nano ~/.bashrc
命令(适用于Ubuntu),编辑您的.bashrc文件并在顶部添加以下内容:
export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${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\]\$ "
我有一个简单的脚本叫做git-cbr
(当前分支),它打印出当前分支的名称。
#!/bin/bash
git branch | grep -e "^*"
我把这个脚本放在一个自定义的文件夹里(~/.bin
)。该文件夹位于$PATH
中。
现在当我在 git 存储库中时,我只需简单地键入 git cbr
即可打印出当前分支名称。
$ git cbr
* master
这个方法有效是因为git
命令会将其第一个参数传递给名为git-arg1
的脚本进行运行。例如,git branch
尝试运行名为git-branch
的脚本等。
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
这是@dmaestro12答案的简短版本,不包含标签支持。
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
的意思是获取当前 Git 仓库的当前分支名称(如果有)或者当前提交的哈希值(如果不在分支上)。 - blueyed
.git/HEAD
,可能位于父目录中。 - Tino