我建议使用git branch --format
指定您想要的确切输出git branch
命令。通过这样做,您可以只提取引用名称和上游,如下所示:
git branch --format "%(refname:short) %(upstream)"
它以以下格式输出分支以及远程分支(如果存在):
25-timeout-error-with-many-targets
31-target-suggestions refs/remotes/origin/31-target-suggestions
54-feedback-link refs/remotes/origin/54-feedback-link
65-digest-double-publish
一旦你有了格式良好的输出,就像通过管道传输一样简单awk
获取您的列表:
git branch --format "%(refname:short) %(upstream)" | awk '{if (!$2) print $1;}'
产生以下输出:
25-timeout-error-with-many-targets
65-digest-double-publish
The awk
如果没有第二列,则部分打印第一列。
奖励:创建别名
通过在全局中创建别名使其易于运行.gitconfig
文件(或任何地方):
[alias]
local-branches = "!git branch --format '%(refname:short) %(upstream:short)' | awk '{if (!$2) print $1;}'"
奖励:远程过滤
如果由于某种原因您的不同分支有多个跟踪遥控器,则可以很容易地指定要检查的遥控器。只需将远程名称添加到 awk 模式中即可。就我而言,是origin
所以我可以这样做:
git branch --format "%(refname:short) %(upstream)" | awk '$2 !~/\/origin\// { print $1 }'
重要提示:别名中的反斜杠需要转义,否则您将得到无效的 gitconfig 文件。
上一个答案
之前的答案在功能上类似,但使用以下内容作为起点。随着时间的推移,评论者指出,由于提交消息中可能存在差异,正则表达式不可靠,因此我不再推荐此方法。但是,这里仅供参考:
我最近发现git branch -vv
这是“非常详细”的版本git branch
命令。
它以以下格式输出分支以及远程分支(如果存在):
25-timeout-error-with-many-targets 206a5fa WIP: batch insert
31-target-suggestions f5bdce6 [origin/31-target-suggestions] Create target suggestion for team and list on save
* 54-feedback-link b98e97c [origin/54-feedback-link] WIP: Feedback link in mail
65-digest-double-publish 2de4150 WIP: publishing-state
一旦你有了格式良好的输出,就像通过管道传输一样简单cut
and awk
获取您的列表:
git branch -vv | cut -c 3- | awk '$3 !~/\[/ { print $1 }'