git branch -a
显示远程和本地分支。
git branch -r
显示远程分支。
有没有办法只列出当地的分支机构?
只是简单的命令
git branch
git branch -a
-所有分支。
git branch -r
-仅限远程分支。
git branch -l
git branch
-仅限本地分支机构。
最直接的方法之一是
git for-each-ref --format='%(refname:short)' refs/heads/
这也适用于脚本。
如果前导星号有问题,我git branch
将按如下方式进行管道传输
git branch | awk -F ' +' '! /\(no branch\)/ {print $2}'
这也消除了当您分离头部时出现的“(无分支)”线。
以下是列出在 origin 中没有同名远程分支的本地分支的方法:
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 -vv | cut -c 3- | awk '$3 !~/\[/ { print $1 }'
答案对这个命令是如何派生的有很好的解释,所以我建议你去阅读那篇文章。
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 show-ref --heads
@gertvdijk 的回答是最简洁优雅的,但我想把它留在这里,因为它帮助我掌握了相当于本地分支refs/heads/*
的想法。
大多数情况下,refs/heads/master
ref 是一个.git/refs/heads/master
包含 git commit 哈希的文件,该哈希指向代表本地 master 分支当前状态的 git 对象,因此下面的每个文件都.git/refs/heads/*
代表一个本地分支。