Jeff King <> writes:

> On Fri, Apr 19, 2013 at 12:50:48PM -0500, Jed Brown wrote:
>> Jeff King <> writes:
>> > Try "git branch --merged master" to get a list of branches that have
>> > already been merged.
>> That's what I use, but I was hoping for something more precise.  For
>> example, a branch that started at 'maint' would show up there, but its
>> integration hasn't completed until it makes it back to 'maint'.
> Yeah, git has no way of knowing that. You can tell it by asking "git
> branch --merged maint" and looking for such topics, of course, but I
> think you are trying to remove as much thinking as possible from the
> process.
> So what is the clue that you would like to use to know that the branch
> is stale. Deletion of the branch on the remote?

I was hoping for ("has an upstream set" AND "upstream branch deleted").

> For that, I don't think there is a single command. You can do "git push
> --dry-run --all" and look for new branches that would be pushed, but
> that is kind of hacky.  The answer you want is:
>   comm -23 \
>     <(git for-each-ref --format='%(refname:short)' refs/heads) \
>     <(git for-each-ref --format='%(refname:short)' refs/remotes/origin |
>       sed s,origin/,,)

This also finds my private branches that I just haven't pushed yet.  The
following has what I think are good semantics.

  git for-each-ref --format='%(refname:short) %(upstream)' refs/heads |
    while read ref upstream; do
      test -n "$upstream" && (git show-ref -q --verify "$upstream" || echo $ref)

FWIW, Git sorts non-alpha characters differently from 'sort'.  This
means that Git output can't be sent to comm without first '| sort'.

$ git branch xy
$ git branch x-y
$ git branch
* master
$ git branch | sort
* master
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to
More majordomo info at

Reply via email to