ChatGPT解决这个技术问题 Extra ChatGPT

仅显示 Git 中的当前分支

是否有相当于以下内容的 Git 命令:

git branch | awk '/\*/ { print $2; }'
我认为这是获得当前分支的最快方法
@ChandrayyaGK:不,因为另一个问题是关于在您的 IDE 中执行此操作。 (许多答案都是针对命令行使用的,所以值得一看,但它不是正确的副本,如果有任何答案可以为已经存在的内容增加重要价值,那么这些答案可能应该迁移到这里。)
@Torek - 这是 Git 使另一个简单的任务变得困难。
发布的链接@ChandrayyaGK 的最佳答案比这慢得多!

e
earl
$ git rev-parse --abbrev-ref HEAD
master

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


使用 git-1.6.2.5 对我也不起作用。 git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (即 rev-parse 不接受 --abbrev-ref (不在手册页中))
JasonWoof,在 1.6.4.2 中为我工作,需要更改日志以查看它何时发生;-)
据我从 Git 日志中得知,此功能于 2009 年 4 月 20 日合并,并与版本 1.6.3 一起发布。
请注意,如果您在一个分离的符号引用中(可能意味着您在一个分支中,但检查了以前的提交),此命令将只返回 HEAD,而不是预期的 master
git branch --show-current 是 Git 2.22 的最新方式吗?
V
VonC

使用 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. 2018actual patch 的原始讨论。

警告:正如 Olivier 提到的 in the comments

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


最后,似乎从一开始就应该存在的东西,已经被添加了!
警告,这并不适用于所有情况!例如,当您在子模块中时,它不起作用。 'git symbolic-ref --short HEAD' 总是有效
@Olivier 好点,谢谢 beaucoup。我已将您的评论包含在答案中以提高知名度。
@crypdick这是可能的,但是你的,错误的......当前的git版本是什么?
@VonC 好问题,但我已经修复了一个解决方案并关闭了集群¯_(ツ)_/¯
b
bfontaine

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

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop

比接受的答案 IMO 更好,因为它适用于没有提交的 repos
作为 TravisCI 构建的一部分运行时出现错误 fatal: ref HEAD is not a symbolic ref
在 GIT 1.9.1 ``` git 版本 1.9.1 中似乎不起作用 致命:ref HEAD 不是符号引用 ```
对我有用:git 版本 2.16.2.windows.1
对于那些收到“符号引用”错误的人:这可能是因为您在技术上没有签出分支,并且处于“分离”状态:stackoverflow.com/questions/10228760/fix-a-git-detached-head。因此,如果您需要该命令在分离头状态下成功退出,请在另一个答案中使用“rev-parse”命令
J
Jay Wick

您可能对以下输出感兴趣

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
您不需要使用 basenamecut;使用 BR=${BR#refs/heads/}(其中 BR 是您保存的 git symbolic-ref HEAD 输出的变量名称)。
Jakub 当然不是,只要你有变量的输出。
也可以做git symbolic-ref --short HEAD
如果您的分支名称中有斜杠(“task/foo”、“feature/bar”),这将中断。当同事们认为斜线很酷时,我的一堆构建脚本开始失败......
P
Peter Mortensen

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

git branch | grep '*'

虽然这适用于 GNU coreutils,但 grep '*' 名义上是一个语法错误。无论如何,您可能想要 git branch | sed -n 's/^\* //p'。或者实际上,OP首先发布的内容是相同的。
@tripleee 你能告诉我为什么 grep '*' 名义上是语法错误吗?
@JKABC:@tripleee 的意思是 '*' 是一个正则表达式,因此它是无效的。您可能想要使用 '[*]'(即字符 * 而不是运算符“零次或多次”)。
@johndodo 感谢您的澄清,现在对我来说很有意义。我通常在 grep '\*' 前完成
只能用 git branch | grep "*" | cut -d' ' -f2 剪切分支名称
P
Peter Mortensen

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

git branch --contains HEAD
* master

这不会输出当前分支。它输出恰好指向提交 HEAD 指向的分支列表。是的,它可以重叠,但这可能会导致误解。从您所在的位置创建一个新分支并重试您的行:两个分支。问题要求“只是当前分支”。
a
arn0n

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

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'

P
Peter Mortensen

我在用着

/etc/bash_completion.d/git

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


如何激活此提示?
在 ubuntu 中,$ source /etc//bash_completion.d/git-prompt 文件在不同系统上的命名可能不同。 (注意:source 关键字与 bash 中的 .(点)相同。)
P
PlagTag

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

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


正是我想要的。美丽的
P
Peter Mortensen

有人可能会觉得这 (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-currentgit version 2.24.3 (Apple Git-128) 上为我工作
P
Peter Mortensen

为了完整起见,至少在 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>

该项目是一个别名,应该存在于交互式 shell 脚本中。对于任何类型的脚本,它都可能不存在。