Created
February 12, 2012 20:40
-
-
Save jasonrudolph/1810768 to your computer and use it in GitHub Desktop.
List remote Git branches and the last commit date for each branch. Sort by most recent commit date.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Credit http://stackoverflow.com/a/2514279 | |
for branch in `git branch -r | grep -v HEAD`;do echo -e `git show --format="%ci %cr" $branch | head -n 1` \\t$branch; done | sort -r |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Example output (resulting from running command on the Rails repo — https://github.com/rails/rails) | |
2012-02-12 03:20:24 -0800 9 hours ago origin/master | |
2012-02-10 10:34:35 -0800 2 days ago origin/3-2-stable | |
2012-01-31 09:56:12 -0800 12 days ago origin/3-1-stable | |
2012-01-24 11:18:06 -0800 3 weeks ago origin/3-0-stable | |
2011-12-31 05:09:14 -0800 6 weeks ago origin/2-3-stable | |
2011-11-25 09:49:54 +0000 3 months ago origin/serializers | |
2011-06-16 12:08:26 -0700 8 months ago origin/compressor | |
2011-05-24 16:03:41 -0700 9 months ago origin/sass-cleanup | |
2011-01-17 14:14:24 +1300 1 year, 1 month ago origin/2-1-stable | |
2011-01-17 14:13:56 +1300 1 year, 1 month ago origin/2-2-stable | |
2010-08-17 17:11:17 -0700 1 year, 6 months ago origin/deps_refactor | |
2010-05-16 22:23:44 +0200 1 year, 9 months ago origin/encoding | |
2009-09-10 17:41:18 -0700 2 years, 5 months ago origin/2-0-stable | |
2008-02-19 02:09:55 +0000 4 years ago origin/1-2-stable |
You can use the command below if you want to filter the branches that were updated X - days ago.
git branch -r --format="%(committerdate:iso8601), %(committerdate:relative) - %(refname:short)" | grep -v [H]EAD | awk -v dateA="$(date -d "$(date +%Y-%m-%d) - 3 days" +%Y-%m-%d)" -F '|' 'dateA<=$1" "$2' | awk -F '/' '{ print $NF }'
From the above command replace the 3 days with your X no of days
Here's my version of this.
# Credit https://gist.github.com/jasonrudolph/1810768
# Credit http://stackoverflow.com/a/2514279
for branch in `git branch -r | grep -v HEAD`;
do printf "%-40s\\t%20s\\n" $branch "`git show --format="%ci %cr" $branch | head -n 1`";
done | sort -k 2
Here's a version sorting by committer date, including colour formatting, that is easy to add as a git alias:
❯ git branch -a --sort=-creatordate --format='%(color:red)%(committerdate:iso8601)%(color:reset) %(align:8)(%(ahead-behind:HEAD))%(end) %(color:blue)%(align:40)%(refname:short)%(end)%(color:reset) %(color:white)%(contents:subject) %(color:yellow)(%(committerdate:relative))%(color:reset)'
Example output:
Git aliases:
[alias]
br = "branch --format='%(color:red)%(committerdate:iso8601)%(color:reset) %(align:8)(%(ahead-behind:HEAD))%(end) %(color:blue)%(align:40)%(refname:short)%(end)%(color:reset) %(color:white)%(contents:subject) %(color:yellow)(%(committerdate:relative))%(color:reset)' --sort=-creatordate"
newestb = "br --sort=-committerdate"
oldestb = "br --sort=committerdate"
It can then be composed with other flags like -r
, -a
, --merged=main
, etc.
@bjeanes this looks really nice but I get this error:
fatal: unknown field name: ahead-behind:HEAD
That’s interesting. What git version? I can’t think of a reason that HEAD wouldn’t be defined, but you could change it to ‘main’ or some other ref
Great thread, thank you!
@bjeanes was on 2.39.0, upgrading to the latest version of git solved the issue. Thank you!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Another way to do this via gitconfig aliases:
rsanheim/dotfiles#34