代码之家  ›  专栏  ›  技术社区  ›  Voo

通过管道命令查看Git分支状态

git
  •  3
  • Voo  · 技术社区  · 6 年前

    有什么方法可以得到 git branch -v 作为一个管道命令?确切地说,我只对分支机构的状态感兴趣,即是否 [gone] 或者不是。

    吉特分行-v 输出:

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

    我怎样才能得到那份工作 someDeletedBranch 裁判?

    请注意,这是 与…一样 git branch --merged ,例如,如果您正在将pull请求压缩到主服务器中,那么 this solution

    这主要与 this question

    1 回复  |  直到 6 年前
        1
  •  4
  •   Jerry Wu    4 年前

    根据Mark的答案构建,以及 this post ,这里有一个非常干净的解决方案(为了可读性,将行拆分):

    git for-each-ref \
        --format='%(if:equals=[gone])%(upstream:track)%(then)%(refname:short)%(end)' \
        refs/heads
    

    好处:

    使用此命令的一种简单方法是使用 git branch -D . 注意 吉特会抱怨的 如果没有要删除的分支。

    git branch -D $(git for-each-ref --format='%(if:equals=[gone])%(upstream:track)%(then)%(refname:short)%(end)' refs/heads)
    

    for branch in $(git for-each-ref --format='%(if:equals=[gone])%(upstream:track)%(then)%(refname:short)%(end)' refs/heads); do git branch -D $branch; done
    

    或者,您可以保存的输出 git for-each-ref

        2
  •  8
  •   Andrew Spencer    6 年前

    水管代替了 git branch 通常是 git for-each-ref

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

    该输出将包括每个本地分支的一个条目,以及指向原点的每个远程跟踪参考的一个条目;所以如果你马上跑 fetch --prune 如图所示,它可以向您显示本地存在但服务器上不存在的内容。

    可以 表示“已从服务器上删除”,或可能表示“已在本地创建但尚未推送”。要区分两者,你还需要知道当地分行是否“认为”自己有上游业务(如果是这样的话,就可以合理地安全地假设它是从服务器上删除的 git 拒绝设置一个不存在的上游;因此,要想让它出错,基本上必须有人故意用损坏的配置“欺骗”您的脚本。)

    所以这就是 --format 这是一种选择。您可以处理此输出,查找

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

    一个单独的条目,如

    refs/remotes/origin/somebranch
    

    [gone]