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

Git branch -r显示远程分支。

是否有一种方法只列出本地分支?


当前回答

使用git分支的——格式,你可以显示本地分支及其配置的远程和合并配置(在repo的.git/config文件中可以找到)。

git branch --format='%(HEAD) %(refname:short) -> %(upstream:short)'

参见git分支使用的git for-each-ref的格式文档

您可以在~/.gitconfig中添加它作为别名

[alias]
        [...]
        brem = branch --format='%(HEAD) %(refname:short) -> %(upstream:short)'
        [...]

例子

在当地有5个分支机构 有2个远程位置:原点和上游 名为upstream的本地分支被配置为推/拉到上游的主分支 命名为test的本地分支没有推送到任何地方,也没有配置远程/合并

> git branch --format='%(HEAD) %(refname:short) -> %(upstream:short)'
* main -> origin/main
  release/v0.01 -> origin/release/v0.01
  release/v0.02 -> origin/release/v0.02
  test ->
  upstream -> upstream/main

其他回答

最直接的方法之一是

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

这也适用于脚本。

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

只是git分支没有选项。

从手册中:

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

下面是如何列出没有相同名称的远程分支的本地分支:

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

使用git分支的——格式,你可以显示本地分支及其配置的远程和合并配置(在repo的.git/config文件中可以找到)。

git branch --format='%(HEAD) %(refname:short) -> %(upstream:short)'

参见git分支使用的git for-each-ref的格式文档

您可以在~/.gitconfig中添加它作为别名

[alias]
        [...]
        brem = branch --format='%(HEAD) %(refname:short) -> %(upstream:short)'
        [...]

例子

在当地有5个分支机构 有2个远程位置:原点和上游 名为upstream的本地分支被配置为推/拉到上游的主分支 命名为test的本地分支没有推送到任何地方,也没有配置远程/合并

> git branch --format='%(HEAD) %(refname:short) -> %(upstream:short)'
* main -> origin/main
  release/v0.01 -> origin/release/v0.01
  release/v0.02 -> origin/release/v0.02
  test ->
  upstream -> upstream/main