427

我试图为此寻找一个特殊的 Git 命令,但我找不到。有什么比以下更短或更快的吗?

git branch | awk '/\*/ { print $2; }'
4

11 回答 11

768
$ git rev-parse --abbrev-ref HEAD
master

这应该适用于 Git 1.6.3 或更高版本。

于 2009-09-13T15:39:25.460 回答
158

在 Git 1.8.1 中,您可以使用带有“--short”选项的git symbolic-ref命令:

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop
于 2013-09-18T17:32:48.977 回答
145

使用 Git 2.22(2019 年第二季度),您将有一个更简单的方法:git branch --show-current.

请参阅Daniels Umanovskis ( ) 的提交 0ecb1fc(2018 年 10 月 25 日(由Junio C Hamano 合并 -- --提交 3710f60中,2019 年 3 月 7 日)umanovskis
gitster

branch: 引入--show-current显示选项

当使用 调用时--show-currentgit branch将打印当前分支名称并终止。
只有实际名称被打印,没有refs/heads.
在分离的 HEAD 状态下,没有任何输出。

用于脚本和交互式/信息性使用。
与 不同git branch --list的是,无需过滤即可仅获取分支名称。

请参阅2018 年 10 月 Git 邮件列表上的原始讨论,以及实际的补丁


警告:正如Olivier在评论中提到的那样:

这并不适用于所有情况!
例如,当您在子模块中时,它不起作用。
' git symbolic-ref --short HEAD' 总是有效的。

于 2019-03-10T14:48:03.757 回答
28

您可能对以下输出感兴趣

git symbolic-ref HEAD

特别是,根据您的需要和布局,您可能希望这样做

basename $(git symbolic-ref HEAD)

或者

git symbolic-ref HEAD | cut -d/ -f3-

然后还有.git/HEAD你可能感兴趣的文件。

于 2009-09-13T15:22:21.917 回答
17

据我所知,没有办法在 Git 中仅显示当前分支,所以我一直在使用:

git branch | grep '*'
于 2013-04-10T20:14:52.393 回答
7

我想这应该很快并且可以与 Python API 一起使用:

git branch --contains HEAD
* master
于 2018-02-15T15:29:08.490 回答
3

我正在使用

/etc/bash_completion.d/git

它与 Git 一起提供,并提供带有分支名称和参数完成的提示。

于 2009-09-13T15:13:28.450 回答
2

这不是更短,但它也处理分离的分支:

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'
于 2018-05-23T09:55:13.293 回答
2

对于那些喜欢别名的人:将以下内容放入您的 .zshrc 中,以便您获得更轻松的 git 命令流:

别名 gpsu="git push --set-upstream origin $(git symbolic-ref --short HEAD)"

于 2021-03-17T14:01:31.280 回答
1

有人可能会觉得这个 ( ) 很有帮助。当前分支以 * 标记显示。git show-branch --current

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
于 2019-09-09T08:18:57.050 回答
0

为了完整echo $(__git_ps1)起见,至少在 Linux 上,应该给你当前分支的名称,用括号括起来。

这在某些情况下可能很有用,因为它不是 Git 命令(取决于 Git),特别是用于设置 Bash 命令提示符以显示当前分支

例如:

/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)

/mnt/c/git>
于 2018-08-01T02:54:11.010 回答