# Improving git branch

9 messages from 2014-12-17 to 2014-12-21. Participants: John Tapsell, Michael J Gruber, Junio C Hamano, Jeff King, Moritz Neeb.
Thread: https://gitlist.dev/t/38190

## John Tapsell, 2014-12-17 11:10

Subject: Improving git branch
Message-ID: <CAHQ6N+qBUcBcG8RC6Co+k_GmJDXCynmyfZmvTjz4bQyH1wG3DA@mail.gmail.com>
URL: https://gitlist.dev/e/CAHQ6N%2BqBUcBcG8RC6Co%2Bk_GmJDXCynmyfZmvTjz4bQyH1wG3DA%40mail.gmail.com

```
Hi all,

  I'm interested in putting in some time and effort into improving the
output of "git branch".

  What I'm thinking is an output like this:

$ git branch

2014-12-17 * (detached from origin/master)     deaba04 Do stuff
2014-12-15   john.ta/add_timing_info                6edbcfa  Add timing stuff
2014-12-14   master                                          8537316
[origin/master: ahead 1, behind 16] Some stuff
2014-12-12   john.ta/new_reduce_memory       99d84db Reintroduce: memory stuff
2014-12-05   john.ta/bugfixes                            e15c95e Add stuff
2014-12-03   john.ta/container                           e9fd4e5 This
branch is a test bed for containers


(These columns are supposed to be all aligned nicely..)

So, features:

1. Show the date of the last commit
2. Sort by date.  Most recently used branches at the top
3. Show the branch name, including your current "branch", with a * to
indicate that it's checked out.
4. Show the sha
5. Show the branch DESCRIPTION - and if that's not available, show the
short-line of the most recent commit.

There is also a small amount of color here that I can't paste here, to
follow the coloring in the current git branch.

Before I start making patches etc, what do people think?  Would I have
a chance of getting this in?  Should I change some aspects etc?

Thanks,

John Tapsell

```

## Michael J Gruber, 2014-12-17 11:28

Subject: Re: Improving git branch
Message-ID: <549168DD.1080906@drmicha.warpmail.net>
URL: https://gitlist.dev/e/549168DD.1080906%40drmicha.warpmail.net
In-Reply-To: <CAHQ6N+qBUcBcG8RC6Co+k_GmJDXCynmyfZmvTjz4bQyH1wG3DA@mail.gmail.com>

```
John Tapsell schrieb am 17.12.2014 um 12:10:
> Hi all,
> 
>   I'm interested in putting in some time and effort into improving the
> output of "git branch".
> 
>   What I'm thinking is an output like this:
> 
> $ git branch
> 
> 2014-12-17 * (detached from origin/master)     deaba04 Do stuff
> 2014-12-15   john.ta/add_timing_info                6edbcfa  Add timing stuff
> 2014-12-14   master                                          8537316
> [origin/master: ahead 1, behind 16] Some stuff
> 2014-12-12   john.ta/new_reduce_memory       99d84db Reintroduce: memory stuff
> 2014-12-05   john.ta/bugfixes                            e15c95e Add stuff
> 2014-12-03   john.ta/container                           e9fd4e5 This
> branch is a test bed for containers
> 
> 
> (These columns are supposed to be all aligned nicely..)
> 
> So, features:
> 
> 1. Show the date of the last commit
> 2. Sort by date.  Most recently used branches at the top
> 3. Show the branch name, including your current "branch", with a * to
> indicate that it's checked out.
> 4. Show the sha
> 5. Show the branch DESCRIPTION - and if that's not available, show the
> short-line of the most recent commit.
> 
> There is also a small amount of color here that I can't paste here, to
> follow the coloring in the current git branch.
> 
> Before I start making patches etc, what do people think?  Would I have
> a chance of getting this in?  Should I change some aspects etc?
> 
> Thanks,
> 
> John Tapsell
> 

I support the general goal, we have quite some way to go there.

As to the method: "git branch" in list mode, "git tag" in list mode and
"git for-each-ref" all do similar things and are in turn not dissimilar
from "git log --no-walk" with appropriate formatting and rev options.

Rather than extending "git branch" any further[*], I suggest a bolder
strategy:

- unify/merge for-each-ref and pretty formats (and code) as far as possible
- leverage that for the list modes of branch and tag

That would allow everyone to get their favourite listing, just like for
logs. Otherwise it would be very difficult to agree on *the* proper
format for an extended branch or tag list.

Michael


[*] I know I'm a sinner, too.

```

## John Tapsell, 2014-12-17 11:51

Subject: Re: Improving git branch
Message-ID: <CAHQ6N+pjT9zCdbvjJnFTmJEM=btjDxn8LTRV-j1vbqGfqwks5A@mail.gmail.com>
URL: https://gitlist.dev/e/CAHQ6N%2BpjT9zCdbvjJnFTmJEM%3DbtjDxn8LTRV-j1vbqGfqwks5A%40mail.gmail.com
In-Reply-To: <549168DD.1080906@drmicha.warpmail.net>

```
I don't fully understand - if I did that, then what difference would
an average user actually see?

On 17 December 2014 at 11:28, Michael J Gruber <git@drmicha.warpmail.net> wrote:
> John Tapsell schrieb am 17.12.2014 um 12:10:
>> Hi all,
>>
>>   I'm interested in putting in some time and effort into improving the
>> output of "git branch".
>>
>>   What I'm thinking is an output like this:
>>
>> $ git branch
>>
>> 2014-12-17 * (detached from origin/master)     deaba04 Do stuff
>> 2014-12-15   john.ta/add_timing_info                6edbcfa  Add timing stuff
>> 2014-12-14   master                                          8537316
>> [origin/master: ahead 1, behind 16] Some stuff
>> 2014-12-12   john.ta/new_reduce_memory       99d84db Reintroduce: memory stuff
>> 2014-12-05   john.ta/bugfixes                            e15c95e Add stuff
>> 2014-12-03   john.ta/container                           e9fd4e5 This
>> branch is a test bed for containers
>>
>>
>> (These columns are supposed to be all aligned nicely..)
>>
>> So, features:
>>
>> 1. Show the date of the last commit
>> 2. Sort by date.  Most recently used branches at the top
>> 3. Show the branch name, including your current "branch", with a * to
>> indicate that it's checked out.
>> 4. Show the sha
>> 5. Show the branch DESCRIPTION - and if that's not available, show the
>> short-line of the most recent commit.
>>
>> There is also a small amount of color here that I can't paste here, to
>> follow the coloring in the current git branch.
>>
>> Before I start making patches etc, what do people think?  Would I have
>> a chance of getting this in?  Should I change some aspects etc?
>>
>> Thanks,
>>
>> John Tapsell
>>
>
> I support the general goal, we have quite some way to go there.
>
> As to the method: "git branch" in list mode, "git tag" in list mode and
> "git for-each-ref" all do similar things and are in turn not dissimilar
> from "git log --no-walk" with appropriate formatting and rev options.
>
> Rather than extending "git branch" any further[*], I suggest a bolder
> strategy:
>
> - unify/merge for-each-ref and pretty formats (and code) as far as possible
> - leverage that for the list modes of branch and tag
>
> That would allow everyone to get their favourite listing, just like for
> logs. Otherwise it would be very difficult to agree on *the* proper
> format for an extended branch or tag list.
>
> Michael
>
>
> [*] I know I'm a sinner, too.

```

## Michael J Gruber, 2014-12-17 12:23

Subject: Re: Improving git branch
Message-ID: <549175AF.7070803@drmicha.warpmail.net>
URL: https://gitlist.dev/e/549175AF.7070803%40drmicha.warpmail.net
In-Reply-To: <CAHQ6N+pjT9zCdbvjJnFTmJEM=btjDxn8LTRV-j1vbqGfqwks5A@mail.gmail.com>

```
Also, please don't top-post here.

That would allow everyone to get their favourite listing, just like for
logs.

John Tapsell schrieb am 17.12.2014 um 12:51:
> I don't fully understand - if I did that, then what difference would
> an average user actually see?
> 
> On 17 December 2014 at 11:28, Michael J Gruber <git@drmicha.warpmail.net> wrote:
>> John Tapsell schrieb am 17.12.2014 um 12:10:
>>> Hi all,
>>>
>>>   I'm interested in putting in some time and effort into improving the
>>> output of "git branch".
>>>
>>>   What I'm thinking is an output like this:
>>>
>>> $ git branch
>>>
>>> 2014-12-17 * (detached from origin/master)     deaba04 Do stuff
>>> 2014-12-15   john.ta/add_timing_info                6edbcfa  Add timing stuff
>>> 2014-12-14   master                                          8537316
>>> [origin/master: ahead 1, behind 16] Some stuff
>>> 2014-12-12   john.ta/new_reduce_memory       99d84db Reintroduce: memory stuff
>>> 2014-12-05   john.ta/bugfixes                            e15c95e Add stuff
>>> 2014-12-03   john.ta/container                           e9fd4e5 This
>>> branch is a test bed for containers
>>>
>>>
>>> (These columns are supposed to be all aligned nicely..)
>>>
>>> So, features:
>>>
>>> 1. Show the date of the last commit
>>> 2. Sort by date.  Most recently used branches at the top
>>> 3. Show the branch name, including your current "branch", with a * to
>>> indicate that it's checked out.
>>> 4. Show the sha
>>> 5. Show the branch DESCRIPTION - and if that's not available, show the
>>> short-line of the most recent commit.
>>>
>>> There is also a small amount of color here that I can't paste here, to
>>> follow the coloring in the current git branch.
>>>
>>> Before I start making patches etc, what do people think?  Would I have
>>> a chance of getting this in?  Should I change some aspects etc?
>>>
>>> Thanks,
>>>
>>> John Tapsell
>>>
>>
>> I support the general goal, we have quite some way to go there.
>>
>> As to the method: "git branch" in list mode, "git tag" in list mode and
>> "git for-each-ref" all do similar things and are in turn not dissimilar
>> from "git log --no-walk" with appropriate formatting and rev options.
>>
>> Rather than extending "git branch" any further[*], I suggest a bolder
>> strategy:
>>
>> - unify/merge for-each-ref and pretty formats (and code) as far as possible
>> - leverage that for the list modes of branch and tag
>>
>> That would allow everyone to get their favourite listing, just like for
>> logs. Otherwise it would be very difficult to agree on *the* proper
>> format for an extended branch or tag list.
>>
>> Michael
>>
>>
>> [*] I know I'm a sinner, too.

```

## Junio C Hamano, 2014-12-17 20:51

Subject: Re: Improving git branch
Message-ID: <xmqqzjam80fb.fsf@gitster.dls.corp.google.com>
URL: https://gitlist.dev/e/xmqqzjam80fb.fsf%40gitster.dls.corp.google.com
In-Reply-To: <CAHQ6N+qBUcBcG8RC6Co+k_GmJDXCynmyfZmvTjz4bQyH1wG3DA@mail.gmail.com>

```
John Tapsell <johnflux@gmail.com> writes:

>   I'm interested in putting in some time and effort into improving the
> output of "git branch".
>
>   What I'm thinking is an output like this:
>
> $ git branch
>
> 2014-12-17 * (detached from origin/master)     deaba04 Do stuff
> 2014-12-15   john.ta/add_timing_info                6edbcfa  Add timing stuff
> 2014-12-14   master                                          8537316
> [origin/master: ahead 1, behind 16] Some stuff
> 2014-12-12   john.ta/new_reduce_memory       99d84db Reintroduce: memory stuff
> 2014-12-05   john.ta/bugfixes                            e15c95e Add stuff
> 2014-12-03   john.ta/container                           e9fd4e5 This
> branch is a test bed for containers
>
>
> (These columns are supposed to be all aligned nicely..)
>
> So, features:
>
> 1. Show the date of the last commit
> 2. Sort by date.  Most recently used branches at the top
> 3. Show the branch name, including your current "branch", with a * to
> indicate that it's checked out.
> 4. Show the sha
> 5. Show the branch DESCRIPTION - and if that's not available, show the
> short-line of the most recent commit.
>
> There is also a small amount of color here that I can't paste here, to
> follow the coloring in the current git branch.
>
> Before I start making patches etc, what do people think?  Would I have
> a chance of getting this in?  Should I change some aspects etc?

Three random points:

 * A single output format can never be favourite of everybody, so
   this needs to be more like

	$ git branch --format='%(committerdate) %(refname) %(subject)'

   optionally with branch.format configuration variable to let the
   user specify the default.

 * I am not sure if the "current" marker should be anywhere but the
   frontmost column in the recommended default.  The output from the
   command obviously is not meant for machine processing
   (e.g. sorting or grepping), so this point is minor, though.

 * I do not think the object name should take valuable screen real
   estate, again in the built-in default (I wouldn't mind people
   hurting themselves with their configuration at all ;-).  After
   looking at "git branch --pretty-long" output, people can give any
   command john.ta/bugfixes instead of e15c95e, no?

```

## Junio C Hamano, 2014-12-17 20:53

Subject: Re: Improving git branch
Message-ID: <xmqqvbla80bm.fsf@gitster.dls.corp.google.com>
URL: https://gitlist.dev/e/xmqqvbla80bm.fsf%40gitster.dls.corp.google.com
In-Reply-To: <549168DD.1080906@drmicha.warpmail.net>

```
Michael J Gruber <git@drmicha.warpmail.net> writes:

> Rather than extending "git branch" any further[*], I suggest a bolder
> strategy:
>
> - unify/merge for-each-ref and pretty formats (and code) as far as possible
> - leverage that for the list modes of branch and tag
>
> That would allow everyone to get their favourite listing, just like for
> logs. Otherwise it would be very difficult to agree on *the* proper
> format for an extended branch or tag list.
>
> Michael
>
>
> [*] I know I'm a sinner, too.

Actually this is not a "bolder" strategy, but the unification has
been discussed and agreed to be the longer-term direction for quite
a while, I think.  Didn't Peff have this in his "things to do when
absolutely bored" box?

```

## Jeff King, 2014-12-17 21:01

Subject: Re: Improving git branch
Message-ID: <20141217210148.GA26551@peff.net>
URL: https://gitlist.dev/e/20141217210148.GA26551%40peff.net
In-Reply-To: <xmqqvbla80bm.fsf@gitster.dls.corp.google.com>

```
On Wed, Dec 17, 2014 at 12:53:49PM -0800, Junio C Hamano wrote:

> Michael J Gruber <git@drmicha.warpmail.net> writes:
> 
> > Rather than extending "git branch" any further[*], I suggest a bolder
> > strategy:
> >
> > - unify/merge for-each-ref and pretty formats (and code) as far as possible
> > - leverage that for the list modes of branch and tag
> >
> > That would allow everyone to get their favourite listing, just like for
> > logs. Otherwise it would be very difficult to agree on *the* proper
> > format for an extended branch or tag list.
> >
> > Michael
> >
> >
> > [*] I know I'm a sinner, too.
> 
> Actually this is not a "bolder" strategy, but the unification has
> been discussed and agreed to be the longer-term direction for quite
> a while, I think.  Didn't Peff have this in his "things to do when
> absolutely bored" box?

Yes. It is not even in my "absolutely bored" box, but rather the "I
would like to work on this but somehow other crap keeps coming up" box.

The last blocker I ran into was that we need to unify the "--contains"
implementation for "git tag" and "git branch". If anybody wants to push
this forward, I think that is the best place to start. I can dig up
references if anybody is interested.

-Peff

```

## Michael J Gruber, 2014-12-18 10:05

Subject: Re: Improving git branch
Message-ID: <5492A6D8.8060509@drmicha.warpmail.net>
URL: https://gitlist.dev/e/5492A6D8.8060509%40drmicha.warpmail.net
In-Reply-To: <xmqqvbla80bm.fsf@gitster.dls.corp.google.com>

```
Junio C Hamano schrieb am 17.12.2014 um 21:53:
> Michael J Gruber <git@drmicha.warpmail.net> writes:
> 
>> Rather than extending "git branch" any further[*], I suggest a bolder
>> strategy:
>>
>> - unify/merge for-each-ref and pretty formats (and code) as far as possible
>> - leverage that for the list modes of branch and tag
>>
>> That would allow everyone to get their favourite listing, just like for
>> logs. Otherwise it would be very difficult to agree on *the* proper
>> format for an extended branch or tag list.
>>
>> Michael
>>
>>
>> [*] I know I'm a sinner, too.
> 
> Actually this is not a "bolder" strategy, but the unification has
> been discussed and agreed to be the longer-term direction for quite
> a while, I think.  Didn't Peff have this in his "things to do when
> absolutely bored" box?
> 

If "waiting for Peff to be bored" is not a bold strategy then I don't
know what would be one ;)

Seriously, I didn't feel bold enough to claim that this is agreed upon
but I am more than happy that it is!

If I can squeeze out some more git time from my other obligations I'll
try and help.

Michael

```

## Moritz Neeb, 2014-12-21 16:36

Subject: Re: Improving git branch
Message-ID: <loom.20141221T170822-647@post.gmane.org>
URL: https://gitlist.dev/e/loom.20141221T170822-647%40post.gmane.org
In-Reply-To: <20141217210148.GA26551@peff.net>

```
Jeff King <peff <at> peff.net> writes:

> 
> On Wed, Dec 17, 2014 at 12:53:49PM -0800, Junio C Hamano wrote:
> 
> > Michael J Gruber <git <at> drmicha.warpmail.net> writes:
> > 
> > > Rather than extending "git branch" any further[*], I suggest a bolder
> > > strategy:
> > >
> > > - unify/merge for-each-ref and pretty formats (and code) as far as
possible
> > > - leverage that for the list modes of branch and tag
> > >
> > > That would allow everyone to get their favourite listing, just like for
> > > logs. Otherwise it would be very difficult to agree on *the* proper
> > > format for an extended branch or tag list.
> > >
> > > Michael
> > >
> > >
> > > [*] I know I'm a sinner, too.
> > 
> > Actually this is not a "bolder" strategy, but the unification has
> > been discussed and agreed to be the longer-term direction for quite
> > a while, I think.  Didn't Peff have this in his "things to do when
> > absolutely bored" box?
> 
> Yes. It is not even in my "absolutely bored" box, but rather the "I
> would like to work on this but somehow other crap keeps coming up" box.

Is this box public somewhere?

> The last blocker I ran into was that we need to unify the "--contains"
> implementation for "git tag" and "git branch". If anybody wants to push
> this forward, I think that is the best place to start. I can dig up
> references if anybody is interested.
> 

Yes, I would be interested in references. I already found something in
Junio's leftover bits [1] that seems related:
  "git tag --contains" should not consider a tag as the anchor point to
  describe the commit, when it can reach another tag that can also be used
  to describe the commit. Cf. [2]

Regards,
Moritz

[1] http://git-blame.blogspot.fr/p/leftover-bits.html
[2] http://thread.gmane.org/gmane.comp.version-control.git/246381/focus=246423

```
