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

时间:2012-09-11 13:21:19

标签: git git-branch

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

git branch -r显示远程分支。

有没有办法只列出本地分支?

11 个答案:

答案 0 :(得分:1274)

只有git branch没有选项。

从联系手册:

  

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

答案 1 :(得分:198)

只是普通命令

git branch

答案 2 :(得分:34)

如果前导星号有问题,我按如下方式管道git branch

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

这也消除了当你有分离头时出现的'(无分支)'线。

答案 3 :(得分:28)

最直接的方法之一是

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

这也适用于脚本。

答案 4 :(得分:25)

git branch -a - 所有分支。

git branch -r - 仅限远程分支。

git branch -lgit branch - 仅限本地分支机构。

答案 5 :(得分:10)

以下是如何列出原始分支中没有远程分支的本地分支:

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

答案 6 :(得分:9)

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

git branch -a | grep -v 'remotes'

答案 7 :(得分:2)

关于如何删除仅本地分支的帖子有一个很棒的answer。在其中,该伙伴构建了一个命令来列出本地分支:

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

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

答案 8 :(得分:0)

只是为了补充@ gertvdijk的回答 - 一张图片说了千言万语以防万一。“

在我的git bash shell上

  

git branch

没有任何参数的

命令显示我所有的本地分支。当前已检出的当前分支也以不同的颜色(绿色)显示,并带有非常直观的星号。

enter image description here

当您尝试使用

查看包括远程分支在内的所有分支时
  

git branch -a

命令然后未检出的远程分支以红色显示:

enter image description here

答案 9 :(得分:0)

git show-ref --heads

@gertvdijk 的回答是最简洁和优雅的,但我想把它留在这里,因为它帮助我理解了 refs/heads/* 与本地分支等价的想法。 >

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

答案 10 :(得分:0)

Powershell 用户可以使用其 Compare-Object 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     False
HEAD->master False       True     False
renamed      False       True     False