是否有相当于以下内容的 Git 命令:
git branch | awk '/\*/ { print $2; }'
$ git rev-parse --abbrev-ref HEAD
master
这应该适用于 Git 1.6.3 或更高版本。
使用 Git 2.22(2019 年第二季度),您将有一个更简单的方法:git branch --show-current
。
请参阅 Daniels Umanovskis (umanovskis
) 的commit 0ecb1fc(2018 年 10 月 25 日)。
(由 Junio C Hamano -- gitster
-- 在 commit 3710f60 中合并,2019 年 3 月 7 日)
分支:引入 --show-current 显示选项
当使用 --show-current 调用时,git branch 将打印当前分支名称并终止。仅打印实际名称,没有参考/标题。在分离的 HEAD 状态下,没有任何输出。
用于脚本和交互式/信息性使用。与 git branch --list 不同,无需过滤即可获取分支名称。
请参阅关于 Git mailing list in Oct. 2018 和 actual patch 的原始讨论。
警告:正如 Olivier 提到的 in the comments:
这并不适用于所有情况!例如,当您在子模块中时,它不起作用。 'git symbolic-ref --short HEAD' 总是有效的。
在 Git 1.8.1 中,您可以使用带有“--short”选项的 git symbolic-ref 命令:
$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop
fatal: ref HEAD is not a symbolic ref
您可能对以下输出感兴趣
git symbolic-ref HEAD
特别是,根据您的需要和布局,您可能希望这样做
basename $(git symbolic-ref HEAD)
或者
git symbolic-ref HEAD | cut -d/ -f3-
然后还有您可能感兴趣的 .git/HEAD
文件。
git rev-parse --symbolic-full-name
缩短为 git symbolic-ref
。
basename
或 cut
;使用 BR=${BR#refs/heads/}
(其中 BR 是您保存的 git symbolic-ref HEAD
输出的变量名称)。
git symbolic-ref --short HEAD
据我所知,没有办法在 Git 中仅显示当前分支,所以我一直在使用:
git branch | grep '*'
grep '*'
名义上是一个语法错误。无论如何,您可能想要 git branch | sed -n 's/^\* //p'
。或者实际上,OP首先发布的内容是相同的。
grep '*'
名义上是语法错误吗?
'*'
是一个正则表达式,因此它是无效的。您可能想要使用 '[*]'
(即字符 *
而不是运算符“零次或多次”)。
grep '\*'
前完成
git branch | grep "*" | cut -d' ' -f2
剪切分支名称
我想这应该很快并且可以与 Python API 一起使用:
git branch --contains HEAD
* master
这不是更短,但它也处理分离的分支:
git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'
我在用着
/etc/bash_completion.d/git
它与 Git 一起提供,并提供带有分支名称和参数完成的提示。
$ source /etc//bash_completion.d/git-prompt
文件在不同系统上的命名可能不同。 (注意:source
关键字与 bash 中的 .
(点)相同。)
对于那些喜欢别名的人:将以下内容放入您的 .zshrc 中,以便您获得更轻松的 git 命令流:
别名 gpsu="git push --set-upstream origin $(git symbolic-ref --short HEAD)"
有人可能会觉得这 (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
git branch --show-current
在 git version 2.24.3 (Apple Git-128)
上为我工作
为了完整起见,至少在 Linux 上,echo $(__git_ps1)
应该给您当前分支的名称,并用括号括起来。
这在某些情况下可能很有用,因为它不是 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>
不定期副业成功案例分享
HEAD
,而不是预期的master
git branch --show-current
是 Git 2.22 的最新方式吗?