Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
List remote Git branches and the last commit's author and author date for each branch. Sort by most recent commit's author date.
# Credit http://stackoverflow.com/a/2514279
for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --format="%ai %ar by %an" $branch | head -n 1` \\t$branch; done | sort -r
# Example output (resulting from running command on the Rails repo — https://github.com/rails/rails)
2012-06-20 14:21:23 -0700 3 weeks ago by Aaron Patterson origin/master
2012-06-17 01:23:02 -0700 4 weeks ago by José Valim origin/3-2-stable
2012-06-15 20:36:09 +0200 4 weeks ago by Piotr Sarnacki origin/actionview-extraction
2012-06-14 10:55:30 -0700 4 weeks ago by Aaron Patterson origin/3-1-stable
2012-06-12 20:05:46 -0700 4 weeks ago by Aaron Patterson origin/3-0-stable
2012-05-29 10:40:14 +0200 6 weeks ago by Piotr Sarnacki origin/cat-gemfile-test
2012-05-27 14:01:44 +0200 7 weeks ago by Piotr Sarnacki origin/helpers-order-fixes
2012-05-27 01:47:37 +0200 7 weeks ago by Piotr Sarnacki origin/possible-railties-fix
2012-03-29 06:26:32 -0700 4 months ago by Xavier Noria origin/2-3-stable
2012-03-02 15:01:20 +0100 4 months ago by Sergey Nartimov + José Valim origin/opt_routes
2011-11-25 09:49:54 +0000 8 months ago by José Valim origin/serializers
2011-06-16 12:08:26 -0700 1 year, 1 month ago by wycats origin/compressor
2011-05-24 16:03:41 -0700 1 year, 2 months ago by wycats origin/sass-cleanup
2011-01-13 15:42:28 +1300 1 year, 6 months ago by Michael Koziarski origin/2-1-stable
2011-01-13 15:33:38 +1300 1 year, 6 months ago by Michael Koziarski origin/2-2-stable
2010-08-17 17:11:17 -0700 1 year, 11 months ago by Aaron Patterson origin/deps_refactor
2010-05-16 15:20:52 -0300 2 years, 2 months ago by Santiago Pastorino origin/encoding
2009-09-09 22:25:23 -0700 2 years, 10 months ago by Beau Harrington origin/2-0-stable
2008-02-19 02:09:55 +0000 4 years, 5 months ago by Jeremy Kemper origin/1-2-stable
@loeschg
Copy link

loeschg commented Jul 24, 2015

👍 Awesome.

@aviemzur
Copy link

aviemzur commented Jul 30, 2015

👍 Cool

@kursion
Copy link

kursion commented Aug 18, 2015

👍

@joequery
Copy link

joequery commented Sep 25, 2015

Awesome!

Here's how you use it as a git alias

[alias]
    branchauthors = "! for branch in `git branch -r | grep -v HEAD`;do echo `git show --format=\"%ai %ar by %an\" $branch | head -n 1` \t$branch; done | sort -r"

@joequery
Copy link

joequery commented Sep 25, 2015

This works really well with seeing pull requests locally

@Jerakin
Copy link

Jerakin commented Mar 16, 2016

for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --pretty=format:"%Cred %cn %>|(40) %Cblue %ar %>|(80) %Creset" $branch | head -n 1` $branch; done | sort -r

For a version that sorts on name, have age and branch. Also formated with colors.
Piotr Sarnacki 7 days ago origin/3-0-stable
Piotr Sarnacki 4 months ago origin/encoding

@tiagobarbosamelo
Copy link

tiagobarbosamelo commented Dec 19, 2016

👍

@bauertank
Copy link

bauertank commented Jan 12, 2017

Thanks 👍

@ananthulasrikar
Copy link

ananthulasrikar commented May 19, 2017

Awesome thanks so much.

@dmusican
Copy link

dmusican commented Dec 1, 2017

Thank you, this is great!

@dmusican
Copy link

dmusican commented Dec 4, 2017

Here's one very minor update I can make to the excellent solution by Jerakin:

[alias]
    branchauthors = "! for branch in `git branch -r | grep -v /HEAD`;do echo `git show --format=\"%ai %ar by %an\" $branch | head -n 1` \t$branch; done | sort -r"

By putting the slash in front of HEAD, it doesn't filter out branches that have HEAD within the name (like my_HEAD_branch) or some such.

@ktornow13
Copy link

ktornow13 commented May 29, 2018

THANK YOU! This was just what i was looking for - wanted to let you know it is still being used!

@AlexanderLill
Copy link

AlexanderLill commented Jun 29, 2018

Thank you! Same here, appreciate the snippet.

@ichihara-3
Copy link

ichihara-3 commented Dec 28, 2018

Thank you! This is Great 👍

@Kapcash
Copy link

Kapcash commented Apr 28, 2020

We can add the format placeholder %<(N) or %>(N) to fix the width of every data, so that we have clean columns:

for branch in `git branch -r | grep -v HEAD`;do echo -e "`git show --format="%>(25)%an | %<(25)%ar" $branch | head -n 1`" $branch; done | sort -r

@antonklimov
Copy link

antonklimov commented Nov 17, 2020

If you look at what git show does you will see that it produces diffs, which is not necessary for this case. It might make sense to add something like --name-only to speed up things a bit if there are many remote branches.

@lexjacobs
Copy link

lexjacobs commented Feb 18, 2021

for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --format="%ai %ar by %an %s" $branch | head -n 1` \\t$branch; done | sort -r

if you also want the commit message (comes form the %s per https://git-scm.com/docs/git-show)

@penggaolai
Copy link

penggaolai commented Jul 23, 2021

If I want to export the result to a csv file, output like "...1 year, 1 month ago..." will be in separate columns, is there any way to fix such a case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment