Git: 如何只列出本地分支?

git branch -a同时显示远程和本地分支。

git branch -r显示远程分支。

有没有办法只列出当地的分支机构?

728350 次浏览

只是简单的命令

git branch

只有git branch没有选项。

manpage

如果没有参数,则列出现有分支,并且当前分支将用星号突出显示。

如果前导星号是一个问题,我管道git branch如下

git branch | awk -F ' +' '! /\(no branch\)/ {print $2}'

这也消除了当您分离头部时显示的“(无分支)”行。

获取列表只是本地分支的其他方法是:

git branch -a | grep -v 'remotes'

最直接的方法之一是

git for-each-ref --format='%(refname:short)' refs/heads/

这也适用于脚本。

以下是如何列出本地分支,这些本地分支的起源中没有同名的远程分支:

git branch | sed 's|* |  |' | sort > localgit branch -r | sed 's|origin/||' | sort > remotecomm -23 local remote

为了补充Gertvdijk的回答-我添加了一些截图,以防它能快速帮助某人。

在我的gitbash shell中,如果我运行以下命令:

git branch

这个命令(没有参数)显示了我所有的本地分支。当前签出的当前分支显示为不同颜色(绿色)以及星号(*)前缀,这非常直观。

在此输入图片描述

当您尝试使用-a(代表所有)参数查看包括远程分支在内的所有分支时:

git branch -a

然后,尚未签出的远程分支也显示为不同(红色)颜色:

在此输入图片描述

git branch -a-所有分支。

git branch -r-远程仅分支。

git branch-当地仅分支。

关于如何删除仅本地分支的帖子有一个很好的答案。在其中,以下内容构建了一个命令来列出本地分支:

git branch -vv | cut -c 3- | awk '$3 !~/\[/ { print $1 }'

答案对这个命令是如何派生的有很好的解释,所以我建议你去阅读那篇文章。

用途:

git show-ref --heads

由gertvdijk回答是最简洁和优雅的,但这可能有助于理解refs/heads/*是本地分支的相当

大多数情况下,refs/heads/master ref是.git/refs/heads/master处的文件,其中包含一个Git提交哈希,该哈希指向代表本地主分支当前状态的Git对象,因此.git/refs/heads/*下的每个文件都代表一个本地分支。

PowerShell用户可以使用它的比较对象 cmdlet执行以下操作:

function match-branch {$localBranches = ((git branch -l) -replace "\*", "") -replace " ", ""$remoteBranches = (((git branch -r) -replace "\*", "") -replace " ", "") -replace "origin/", ""Compare-Object -ReferenceObject $localBranches -DifferenceObject $remoteBranches -IncludeEqual| Select-Object @{Label = "branch"; Expression = { $_.InputObject } },@{Label = ”both”; Expression = { $_.SideIndicator -eq "==" } },@{Label = ”remoteOnly”; Expression = { $_.SideIndicator -eq "=>" } },@{Label = ”localOnly”; Expression = { $_.SideIndicator -eq "<=" } }}

示例输出

branch        both remoteOnly localOnly------        ---- ---------- ---------master        True      False     FalseHEAD->master False       True     Falserenamed      False       True     False