mik*_*628 2321 git branch git-branch
我来自Subversion背景,当我有一个分支时,我知道我正在处理的是"这些工作文件指向这个分支".
但是对于Git,我不确定我何时在NetBeans或Notepad ++中编辑文件,无论它是与主服务器还是其他分支相关联.
git
在bash中没有问题,它告诉我我在做什么.
Jis*_*iot 4536
要显示您当前所在的分支,而未列出其他分支,您可以执行以下操作:
git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)
参考:
rob*_*dev 1886
git branch
Run Code Online (Sandbox Code Playgroud)
应该显示您的回购的所有本地分支.已加星标的分支是您当前的分支.
如果您只想检索所在分支的名称,您可以执行以下操作:
git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)
Wer*_*ght 503
您还git symbolic-ref HEAD
可以显示完整的refspec.
仅在Git v1.8及更高版本中显示分支名称(感谢Greg指出这一点):
$ git symbolic-ref --short HEAD
Run Code Online (Sandbox Code Playgroud)
在Git v1.7 +上你也可以这样做:
$ git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)
如果你在一个分支上,两者都应该给出相同的分支名称.如果你是一个独立的头,答案不同.
注意:
在早期的客户端,这似乎工作:
Run Code Online (Sandbox Code Playgroud)$ git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
- Darien 26. 2014年3月
Ste*_*aan 242
为了我自己的参考(但它可能对其他人有用)我概述了这个线程中提到的大多数(基本命令行)技术,每个技术都应用于几个用例:HEAD是(指向):
结果:
git branch | sed -n '/\* /s///p'
master
(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
# HEAD detached at 285f294
git describe --all
heads/master
注意:不 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
git rev-parse --abbrev-ref HEAD
master
HEAD
git symbolic-ref --short HEAD
master
(仅供参考,这是使用git版本1.8.3.1完成的)
Fil*_*nov 132
还有一个选择:
git name-rev --name-only HEAD
Run Code Online (Sandbox Code Playgroud)
Max*_*Max 99
从git的2.22版开始,您可以使用:
git branch --show-current
Run Code Online (Sandbox Code Playgroud)
Oli*_*alo 91
很简单,我把它放在一个班轮(bash)
git branch | sed -n '/\* /s///p'
Run Code Online (Sandbox Code Playgroud)
(信用:有限赎罪)
当我在那里时,一个班轮来获得远程跟踪分支(如果有的话)
git rev-parse --symbolic-full-name --abbrev-ref @{u}
Run Code Online (Sandbox Code Playgroud)
vid*_*unj 91
在终端中写入以下命令:
git branch | grep \*
Run Code Online (Sandbox Code Playgroud)
或者
git branch --show-current
Run Code Online (Sandbox Code Playgroud)
或者在 Git 2.22 及更高版本上:
git branch --show
Run Code Online (Sandbox Code Playgroud)
Tad*_*eck 61
您只需在Linux上的存储库目录中键入命令行(console):
$ git status
Run Code Online (Sandbox Code Playgroud)
你会看到一些文字,其中有类似的东西:
...
On branch master
...
Run Code Online (Sandbox Code Playgroud)
这意味着你目前在master
分公司.如果您当时正在编辑任何文件并且它位于同一本地存储库(包含Git版本控制管理下的文件的本地目录)中,那么您正在编辑此分支中的文件.
Ros*_*ose 39
要获取 git 使用中的当前分支,
git branch --show-current
Run Code Online (Sandbox Code Playgroud)
Kou*_*sha 35
git symbolic-ref -q --short HEAD
Run Code Online (Sandbox Code Playgroud)
我在需要当前分支名称的脚本中使用它.它将显示当前对HEAD的简短符号引用,它将是您当前的分支名称.
ung*_*rys 26
git branch | grep -e "^*" | cut -d' ' -f 2
Run Code Online (Sandbox Code Playgroud)
将仅显示分支名称
小智 25
git branch
仅显示当前分支名称.
虽然git branch会显示所有分支并用星号突出显示当前分支,但在处理大量分支时它可能过于繁琐.
要仅显示您当前所在的分支,请使用:
git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)
Sil*_*rta 22
找到一个与Oliver Refalo相同长度的命令行解决方案,使用好的'awk:
git branch | awk '/^\*/{print $2}'
Run Code Online (Sandbox Code Playgroud)
awk
读作"在{}
匹配正则表达式的行上做的东西".默认情况下,它假定以空格分隔的字段,因此您打印第二个字段.如果您可以假设只有您的分支的行具有*,则可以删除^.啊,打高尔夫!
Sid*_*thy 20
我会尝试以下其中一项:
\n\ngit symbolic-ref --short HEAD\n>>> sid-dev\n
Run Code Online (Sandbox Code Playgroud)\n\ngit branch --show-current\n>>> sid-dev\n
Run Code Online (Sandbox Code Playgroud)\n3.> git name-rev \xe2\x80\x93name-only HEAD
\ngit name-rev \xe2\x80\x93name-only HEAD\n>>> HEAD sid-dev\n
Run Code Online (Sandbox Code Playgroud)\n笔记:
\n\n\n1.> git symbolic-ref --short HEAD显示对当前分支\xe2\x80\x99s HEAD 的短符号引用。这是当前的分支名称。
\n
\n\n2.> gitbranch --show-current也是一种简单高效的打印当前分支名称的方法。
\n
\n\n3.> git name-rev \xe2\x80\x93name-only HEAD
\nHEAD
给出当前分支修订的符号名称
\n\n4.> 在上面的例子中,
\nsid-dev
是我的分支的名称。
小智 20
有多种方法可以检查当前分支,Git
但我更喜欢:
git branch --show
Run Code Online (Sandbox Code Playgroud)
甚至git branch
还显示当前分支名称以及所有现有分支名称列表。
Jak*_*ski 18
为什么不使用git-aware shell提示符,它会告诉你当前分支的名称? git status
也有帮助.
如何git-prompt.sh从contrib/
做它(GIT版本2.3.0)中定义的__git_ps1
辅助函数:
首先,如果检测到正在进行的rebase,则会有特殊情况.Git在rebase进程中使用未命名的分支(分离的HEAD)使其成为原子,并将原始分支保存在其他地方.
如果.git/HEAD
文件是一个符号链接(一个非常罕见的情况,来自Git的古代历史),它使用git symbolic-ref HEAD 2>/dev/null
否则,它会读取.git/HEAD
文件.后续步骤取决于其内容:
如果此文件不存在,则没有当前分支.如果存储库是裸的,通常会发生这种情况
如果它以'ref: '
prefix 开头,那么.git/HEAD
是symref(符号引用),我们在正常分支上.剥去此前缀以获取全名,并剥离refs/heads/
以获取当前分支的简称:
b="${head#ref: }"
# ...
b=${b##refs/heads/}
Run Code Online (Sandbox Code Playgroud)如果它不是以它开头'ref: '
,则它是分离的HEAD(匿名分支),直接指向某个提交.用于git describe ...
以人类可读的形式编写当前提交.
我希望有所帮助.
Dzi*_*mid 18
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
git.branch
Run Code Online (Sandbox Code Playgroud)
dgo*_*vin 16
git status的嘈杂版本可以解决这个问题
git status -bsuno
Run Code Online (Sandbox Code Playgroud)
打印出来
## branch-name
Run Code Online (Sandbox Code Playgroud)
dma*_*o12 15
对不起,这是另一个命令行答案,但是当我发现这个问题并且其中许多答案都有帮助时,这就是我所寻找的.我的解决方案是以下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
}
Run Code Online (Sandbox Code Playgroud)
这应该总是给我一些人类可读和可直接用作参数的东西git checkout
.
feature/HS-0001
v3.29.5
小智 15
你可以在工作目录命令上使用git bash如下
git status -b
Run Code Online (Sandbox Code Playgroud)
它会告诉你你在哪个分支上有许多有用的命令
-s
Run Code Online (Sandbox Code Playgroud)
--short以短格式提供输出.
-b --branch即使是短格式显示分支和跟踪信息.
--porcelain [=]以易于解析的格式为脚本提供输出.这类似于短输出,但在Git版本中保持稳定,无论用户配置如何.请参阅下文了解详情.
version参数用于指定格式版本.这是可选的,默认为原始版本v1格式.
--long以长格式输出.这是默认值.
-v --verbose除了已更改的文件的名称之外,还显示要提交的文本更改(即,与git diff --cached的输出类似).如果指定了-v两次,那么还会显示工作树中尚未暂存的更改(即,与git diff的输出一样).
kar*_*ikr 13
随着时间的推移,我们可能会有很长的分支列表.
虽然其他一些解决方案很棒,但这就是我所做的(简要来自雅各布的回答):
git branch | grep \*
Run Code Online (Sandbox Code Playgroud)
现在,
git status
Run Code Online (Sandbox Code Playgroud)
有效,但仅限于有任何本地更改
jac*_*nye 13
我建议使用这两个命令中的任何一个.
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
小智 12
在Netbeans中,确保启用版本控制注释(查看 - >显示版本控制标签).然后,您可以在项目名称旁边看到分支名称.
http://netbeans.org/bugzilla/show_bug.cgi?id=213582
小智 12
那这个呢?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
Run Code Online (Sandbox Code Playgroud)
Sat*_*mar 12
git status
Run Code Online (Sandbox Code Playgroud)
还将给出分支名称以及更改.
例如
>git status
On branch master // <-- branch name here
.....
Run Code Online (Sandbox Code Playgroud)
Die*_*ino 11
我有一个名为git-cbr
(当前分支)的简单脚本,它打印出当前分支名称.
#!/bin/bash
git branch | grep -e "^*"
Run Code Online (Sandbox Code Playgroud)
我把这个脚本放在一个自定义文件夹(~/.bin
)中.该文件夹在$PATH
.
所以现在当我在git repo中时,我只需键入git cbr
即可打印出当前的分支名称.
$ git cbr
* master
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为该git
命令采用其第一个参数并尝试运行名称为的脚本git-arg1
.例如,git branch
尝试运行一个名为的脚本git-branch
等.
Kir*_*lov 10
您可以永久设置bash输出以显示您的git-branch名称.当您使用不同的分支时,它非常方便,无需一直打字$ git status
.Github repo git-aware-prompt
.
打开终端(ctrl-alt-t)并输入命令
mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git
Run Code Online (Sandbox Code Playgroud)
使用sudo nano ~/.bashrc
命令编辑.bashrc (对于Ubuntu)并将以下内容添加到顶部:
export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"
Run Code Online (Sandbox Code Playgroud)
然后粘贴代码
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\]\$ "
Run Code Online (Sandbox Code Playgroud)
在同一文件的末尾,您将安装代码粘贴到之前.这将为您提供彩色输出:
mrr*_*sof 10
以下shell命令告诉您当前所在的分支.
git branch | grep ^\*
Run Code Online (Sandbox Code Playgroud)
如果您不希望每次想要知道分支并且使用Bash时键入该长命令,请为命令提供一个简短的别名,例如别名cb
,如此.
alias cb='git branch | grep ^\*'
Run Code Online (Sandbox Code Playgroud)
如果您在分支机构中,并且您的提示是$
,您将得到* master
如下结果.
$ cb
* master
Run Code Online (Sandbox Code Playgroud)
在分离的头上时返回分支名称或SHA1:
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)
这是@ dmaestro12的答案的简短版本,没有标签支持.
一个简单的黑客可能是
git branch|grep "*"
Run Code Online (Sandbox Code Playgroud)
输出:
* <current branch>
Run Code Online (Sandbox Code Playgroud)
编辑:
了解当前分支的另一种方法
git status|head -1
On branch <current branch name>
Run Code Online (Sandbox Code Playgroud)
如果你真的想要在分离的HEAD状态下检出最后一个分支/标签.
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
Run Code Online (Sandbox Code Playgroud)
更新 如果您有并且不害怕awk,那就更好了.
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
我知道这已经晚了但是在linux/mac上,从终端你可以使用以下内容.
git status | sed -n 1p
Run Code Online (Sandbox Code Playgroud)
说明:
git status - >获取工作树状态
sed -n 1p - >从状态体获取第一行
对上述命令的响应如下:
"On branch your_branch_name"
Run Code Online (Sandbox Code Playgroud)
小智 5
您还可以使用如下所示的GIT_BRANCH变量:https ://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
git插件设置了几个可以在脚本中使用的环境变量:
GIT_COMMIT-当前的SHA
GIT_BRANCH-当前正在使用的分支的名称,例如“ master”或“ origin / foo”
GIT_PREVIOUS_COMMIT-来自同一分支的先前构建提交的SHA(当前在第一个构建分支中的SHA)
GIT_URL-存储库远程URL
GIT_URL_N-存在多个远程目录时的存储库远程URL,例如GIT_URL_1,GIT_URL_2
GIT_AUTHOR_EMAIL-提交人/作者的电子邮件
GIT_COMMITTER_EMAIL-提交人/作者的电子邮件
将其添加到PS1
使用Mac:
PS1='\W@\u >`[ -d .git ] && git branch | grep ^*|cut -d" " -f2`> $ '
Run Code Online (Sandbox Code Playgroud)
在运行上面的命令之前:
运行该命令后:
不用担心,如果它不是GIT存储库,它将不会显示错误,因为它会[-d .git]
检查.git
文件夹是否存在。
我想要一行可以在 Windows CMD shell 中解析的行(这里的大多数答案都使用 unix 命令)。大多数答案还存在结帐稀疏和头部分离的问题。
git branch
Run Code Online (Sandbox Code Playgroud)
给出工作副本中可用的分支列表,在签出的分支前面有一个 *。这有利于快速查看,但不利于解析。
git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)
当在分离的 HEAD 结账上使用它时,只是将HEAD显示为分支。同样,当使用
git symbolic-ref HEAD
Run Code Online (Sandbox Code Playgroud)
我遇到了致命的问题:当使用来自标签的分离头时,ref HEAD 不是符号引用。
git describe --contains --all HEAD
Run Code Online (Sandbox Code Playgroud)
似乎在大多数情况下都有效,并且接近我想要的,但有些存储库只是返回了一个空行。
git status
Run Code Online (Sandbox Code Playgroud)
有效,但它列出了存储库中的所有差异,这使得解析有点困难。
我最终决定了以下几点;
git status |findstr/n ^^|findstr "^[1]: ^[0]:"
Run Code Online (Sandbox Code Playgroud)
这给出如下输出;
1:HEAD于2020年2月30日分离
或者
1:在分支主控上
归档时间: |
|
查看次数: |
1356119 次 |
最近记录: |