Git分支状态通过管道命令

问题描述 投票:4回答:1

有没有办法让git branch -v的输出作为管道命令?确切地说,我只对分支的状态感兴趣,即它是否是[gone]

例如,给出以下git branch -v输出:

> git branch -v 
  master            32c59ad4 Some other comment
  someDeletedBranch 6aacba47 [gone] Some Comment

我怎么能得到someDeletedBranch参考?

请注意,这与git branch --merged不同,例如,如果你将拉请求压缩到你的主人,那么this solution将不会这样做。

这主要与this question有关,因为这将是能够创建可靠脚本以删除遥控器上不存在的本地分支的缺失部分。

git
1个回答
5
投票

git branch的管道替代品通常是git for-each-ref

$ git fetch --prune
$ git for-each-ref --format '%(refname) %(upstream)' refs/heads refs/remotes/origin

此输出将包括每个本地分支的条目,以及指向返回原点的每个远程跟踪ref的条目;因此,如果在此处显示的fetch --prune之后运行,它可以显示本地存在但服务器上不存在的内容。

当然有一个问题:“本地存在但不存在于服务器上”可能意味着“从服务器中删除”,或者可能意味着“在本地创建但尚未推送”。为了区分,您还需要知道您的本地分支是否“认为”它是否具有上游。 (如果确实如此,假设它已从服务器中删除是合理安全的,因为git拒绝设置不存在的上游;因此,如果错误,有人基本上必须故意“欺骗”您的脚本使用损坏的配置。)

这就是--format选项的用途。您可以处理此输出,寻找

refs/heads/somebranch refs/remotes/origin/somebranch

并且,对于每个这样的条目,如果还没有单独的条目,如

refs/remotes/origin/somebranch

那么这是一个标记为[gone]的分支

© www.soinside.com 2019 - 2024. All rights reserved.