git branch -a
显示远程和本地分支。
git branch -r
显示远程分支。
有没有办法只列出本地分支机构?
只是简单的命令
git branch
git branch -a
- 所有分支。
git branch -r
- 仅限远程分支机构。
git branch
- 本地分支(包含链接到远程分支的本地分支)。
最直接的方法之一是
git for-each-ref --format='%(refname:short)' refs/heads/
这也非常适合脚本。
如果前导星号有问题,我会按如下方式通过管道传输
git branch
git branch | awk -F ' +' '! /\(no branch\)/ {print $2}'
这也消除了当您分离头部时出现的“(无分支)”线。
以下是如何列出源中没有同名远程分支的本地分支:
git branch | sed 's|* | |' | sort > local
git branch -r | sed 's|origin/||' | sort > remote
comm -23 local remote
获取本地分支列表的其他方法是:
git branch -a | grep -v 'remotes'
git branch
的
--format
,您可以显示本地分支及其配置的 remote
和 merge
配置(如存储库的 .git/config
文件中所示)。git branch --format='%(HEAD) %(refname:short) -> %(upstream:short)'
请参阅
git for-each-ref
格式文档,该文档由
git branch
使用
您可以将其添加为您的 ~/.gitconfig
中的别名
[alias]
[...]
brem = branch --format='%(HEAD) %(refname:short) -> %(upstream:short)'
[...]
示例
origin
upstream
名为 upstream
upstream
的 main
分支名为 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 show-ref --heads
gertvdijk的
答案是最简洁和优雅的,但这可能有助于理解refs/heads/*
相当于本地分支机构。 大多数情况下,
refs/heads/master
引用是
.git/refs/heads/master
处的一个文件,其中包含一个Git提交哈希,该哈希指向代表本地主分支当前状态的Git对象,因此.git/refs/heads/*
下的每个文件都代表一个本地分支。 用户可以使用其 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 branch
列出尚未合并到远程的更改的本地分支
git branch --list --no-merged
列出从未链接到远程的本地
git branch -vv | awk '/: gone]/{print $1}'