git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jed Brown <jed@59A2.org>
To: Jeff King <peff@peff.net>
Cc: Git List <git@vger.kernel.org>
Subject: Re: Find/prune local branches after upstream branch is deleted?
Date: Fri, 19 Apr 2013 14:30:32 -0500	[thread overview]
Message-ID: <87vc7i2u93.fsf@mcs.anl.gov> (raw)
In-Reply-To: <20130419180520.GA22865@sigill.intra.peff.net>

Jeff King <peff@peff.net> writes:

> On Fri, Apr 19, 2013 at 12:50:48PM -0500, Jed Brown wrote:
>
>> Jeff King <peff@peff.net> 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)
    done


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
  x-y
  xy
$ git branch | sort
* master
  xy
  x-y

      reply	other threads:[~2013-04-19 20:01 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-19 17:11 Find/prune local branches after upstream branch is deleted? Jed Brown
2013-04-19 17:37 ` Jeff King
2013-04-19 17:50   ` Jed Brown
2013-04-19 18:05     ` Jeff King
2013-04-19 19:30       ` Jed Brown [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87vc7i2u93.fsf@mcs.anl.gov \
    --to=jed@59a2.org \
    --cc=git@vger.kernel.org \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).