如何获取Git中当前分支的名称?
当前回答
如果您确实希望最后一个分支/标记也在分离的HEAD状态下检出。
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
使现代化如果你有而且不害怕awk,这会更好。
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
其他回答
下面的shell命令告诉您当前所在的分支。
git branch | grep ^\*
如果您不想在每次想知道分支并使用Bash时键入长命令,请为该命令提供一个短别名,例如别名cb,如下所示。
alias cb='git branch | grep ^\*'
当您在branch master中并且提示为$时,您将获得*master,如下所示。
$ cb
* master
只需在~/.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\] $ "
这样,您可以在Terminal中拥有当前分支名称
由Coderwall.com提供
我知道这已经得到了回答,但在最新版本的Git中,命令gitbranch会以某种提示打开分支列表,您必须退出。这让我烦死了!
这是我的解决方案:打开bash配置文件并键入:
#!/bin/bash
git() {
if [[ $@ == "branch" ]] then
command git branch -a | grep -v 'remotes'
else
command git "$@"
fi
}
现在打开终端,在git repo中键入以下命令进行测试:
source ~/.zshrc
git branch
瞧!您的本地分支机构列表将在您的终端中打印出来。
编写到bashrc文件的代码将覆盖gitbranch的默认函数,并用一个更长的命令替换它,该命令通过-a参数列出所有本地分支。然后我们把多余的不需要的业务打印出来。如果排除grep命令,仍然会得到令人讨厌的提示。如果您不熟悉编写bash命令,请检查以下解释:关于.bash_profile、.bashrc,以及别名应该写在哪里?
使用早期的想法;假设sha1为40个字符;和跟踪引用(是的,应该删除调试打印行:-):
git reflog | awk '
$3 == "checkout:" && (sha == "" || sha == $1 ) {
from=$(NF - 2)
to=$NF
print from, to, length(from) > "/dev/stderr"
if (length(from) != 40) { print from ; exit; }
sha=substr(from, 1, 7)
print sha > "/dev/stderr"
}
'
给出原始输出:
$ git status
HEAD detached at 147049c
[...]
$ ./gime-branch.sh
a47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40
a47be8d
master HEAD^ 6
master
git branch
应显示回购协议的所有本地分支机构。星形分支是您当前的分支。
要仅检索您所在分支的名称,请执行以下操作:
git rev-parse --abbrev-ref HEAD
或Git 2.22及以上版本:
git branch --show-current
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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日志日期格式