# help with git query

6 messages from 2009-04-13 to 2009-04-14. Participants: E R, Nathan W. Panike, Jeff King, Björn Steinbrink.
Thread: https://gitlist.dev/t/18853

## E R, 2009-04-13 18:51

Subject: help with git query
Message-ID: <3a69fa7c0904131151p35945ed3y58cba069bd801337@mail.gmail.com>
URL: https://gitlist.dev/e/3a69fa7c0904131151p35945ed3y58cba069bd801337%40mail.gmail.com

```
Hi,

I'd like to generate the following report from git:

for each branch:
  - info about the latest commit on that branch (date and time, message, etc.)
  - info about the last time it was merged into master

What commands can I run to figure this out? I think I can figure out
the first one - it's the second one I'm having trouble with.

And if it would easier to do it from the C API (or something like the
perl Git::PurePerl module) I'd be interested in knowing that, too.

Thanks,
ER

```

## Nathan W. Panike, 2009-04-13 20:31

Subject: Re: help with git query
Message-ID: <d77df1110904131331p24f52220o74c401c97fbb904d@mail.gmail.com>
URL: https://gitlist.dev/e/d77df1110904131331p24f52220o74c401c97fbb904d%40mail.gmail.com
In-Reply-To: <3a69fa7c0904131151p35945ed3y58cba069bd801337@mail.gmail.com>

```
On Mon, Apr 13, 2009 at 1:51 PM, E R <pc88mxer@gmail.com> wrote:
> Hi,
>
> I'd like to generate the following report from git:
>
> for each branch:
>  - info about the latest commit on that branch (date and time, message, etc.)

Depending on what you want to do---from a bash shell, you could do:

for i in $(git branch -a | cut -b3-); do echo $i; git show -s $i; echo; done

>  - info about the last time it was merged into master

for i in $(git branch -a | cut -b3-); do echo $i; git show -s $(git
merge-base $i master); echo; done
>
> What commands can I run to figure this out? I think I can figure out
> the first one - it's the second one I'm having trouble with.
>
> And if it would easier to do it from the C API (or something like the
> perl Git::PurePerl module) I'd be interested in knowing that, too.
>
> Thanks,
> ER
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

```

## E R, 2009-04-13 20:57

Subject: Re: help with git query
Message-ID: <3a69fa7c0904131357w5ef6b8feu7aac503fdcc4486c@mail.gmail.com>
URL: https://gitlist.dev/e/3a69fa7c0904131357w5ef6b8feu7aac503fdcc4486c%40mail.gmail.com
In-Reply-To: <d77df1110904131331p24f52220o74c401c97fbb904d@mail.gmail.com>

```
Thanks - that's very helpful.

For the second question, is it possible to find the commit that
represents the merge in the master branch?

i.e.

   git merge-base XXX master

returns the commit in branch XXX that got merged into master. I'd like
to also find the commit that represents the merge in master.

On Mon, Apr 13, 2009 at 3:31 PM, Nathan W. Panike
<nathan.panike@gmail.com> wrote:
> On Mon, Apr 13, 2009 at 1:51 PM, E R <pc88mxer@gmail.com> wrote:
>> Hi,
>>
>> I'd like to generate the following report from git:
>>
>> for each branch:
>>  - info about the latest commit on that branch (date and time, message, etc.)
>
> Depending on what you want to do---from a bash shell, you could do:
>
> for i in $(git branch -a | cut -b3-); do echo $i; git show -s $i; echo; done
>
>>  - info about the last time it was merged into master
>
> for i in $(git branch -a | cut -b3-); do echo $i; git show -s $(git
> merge-base $i master); echo; done
>>
>> What commands can I run to figure this out? I think I can figure out
>> the first one - it's the second one I'm having trouble with.
>>
>> And if it would easier to do it from the C API (or something like the
>> perl Git::PurePerl module) I'd be interested in knowing that, too.
>>
>> Thanks,
>> ER
>> --
>> To unsubscribe from this list: send the line "unsubscribe git" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>

```

## Nathan W. Panike, 2009-04-13 22:33

Subject: Re: help with git query
Message-ID: <d77df1110904131533y46234255qc0ec533ee583df95@mail.gmail.com>
URL: https://gitlist.dev/e/d77df1110904131533y46234255qc0ec533ee583df95%40mail.gmail.com
In-Reply-To: <3a69fa7c0904131357w5ef6b8feu7aac503fdcc4486c@mail.gmail.com>

```
On Mon, Apr 13, 2009 at 3:57 PM, E R <pc88mxer@gmail.com> wrote:
> Thanks - that's very helpful.
>
> For the second question, is it possible to find the commit that
> represents the merge in the master branch?

There might not be an actual commit, if the merge was a fast forward.

>
> i.e.
>
>   git merge-base XXX master
>
> returns the commit in branch XXX that got merged into master. I'd like
> to also find the commit that represents the merge in master.

If one exists, I think this might do what you want:

git log --pretty=oneline master --not $(git merge-base XXX master) | tail -1

> On Mon, Apr 13, 2009 at 3:31 PM, Nathan W. Panike
> <nathan.panike@gmail.com> wrote:
>> On Mon, Apr 13, 2009 at 1:51 PM, E R <pc88mxer@gmail.com> wrote:
>>> Hi,
>>>
>>> I'd like to generate the following report from git:
>>>
>>> for each branch:
>>>  - info about the latest commit on that branch (date and time, message, etc.)
>>
>> Depending on what you want to do---from a bash shell, you could do:
>>
>> for i in $(git branch -a | cut -b3-); do echo $i; git show -s $i; echo; done
>>
>>>  - info about the last time it was merged into master
>>
>> for i in $(git branch -a | cut -b3-); do echo $i; git show -s $(git
>> merge-base $i master); echo; done
>>>
>>> What commands can I run to figure this out? I think I can figure out
>>> the first one - it's the second one I'm having trouble with.
>>>
>>> And if it would easier to do it from the C API (or something like the
>>> perl Git::PurePerl module) I'd be interested in knowing that, too.
>>>
>>> Thanks,
>>> ER
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe git" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>
>>
>

```

## Jeff King, 2009-04-14 05:46

Subject: Re: help with git query
Message-ID: <20090414054654.GC19027@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20090414054654.GC19027%40coredump.intra.peff.net
In-Reply-To: <d77df1110904131331p24f52220o74c401c97fbb904d@mail.gmail.com>

```
On Mon, Apr 13, 2009 at 03:31:49PM -0500, Nathan W. Panike wrote:

> > for each branch:
> >  - info about the latest commit on that branch (date and time, message, etc.)
> 
> Depending on what you want to do---from a bash shell, you could do:
> 
> for i in $(git branch -a | cut -b3-); do echo $i; git show -s $i; echo; done

Ick, please use the plumbing designed for this exact thing instead of
trying to parse "git branch":

  $ git for-each-ref --format='%(subject)
    %(authorname) %(authoremail)
    %(authordate)' refs/heads/

or however you want to format it. See "git help for-each-ref" for a list
of fields (you can also just pipe the output of for-each-ref into a
shell loop, as in your example, but with the format options there is
often no need).

-Peff

```

## Björn Steinbrink, 2009-04-14 06:26

Subject: Re: help with git query
Message-ID: <20090414062652.GC3948@atjola.homenet>
URL: https://gitlist.dev/e/20090414062652.GC3948%40atjola.homenet
In-Reply-To: <20090414054654.GC19027@coredump.intra.peff.net>

```
On 2009.04.14 01:46:54 -0400, Jeff King wrote:
> On Mon, Apr 13, 2009 at 03:31:49PM -0500, Nathan W. Panike wrote:
> 
> > > for each branch:
> > >  - info about the latest commit on that branch (date and time, message, etc.)
> > 
> > Depending on what you want to do---from a bash shell, you could do:
> > 
> > for i in $(git branch -a | cut -b3-); do echo $i; git show -s $i; echo; done
> 
> Ick, please use the plumbing designed for this exact thing instead of
> trying to parse "git branch":
> 
>   $ git for-each-ref --format='%(subject)
>     %(authorname) %(authoremail)
>     %(authordate)' refs/heads/
> 
> or however you want to format it. See "git help for-each-ref" for a list
> of fields (you can also just pipe the output of for-each-ref into a
> shell loop, as in your example, but with the format options there is
> often no need).

git log --no-walk --branches --decorate --pretty=short

is what I use, sometimes. Some other "pretty" format might be more
suitable for your use case.

Björn

```
