有没有办法让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 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]
的分支