How to draw git log output that shows date and hash on one line?

I need to get the Date and commit the results of the github set in this format:

Date Commit
19 Mar 2015 b6959eafe0df6031485509c539e22eaf2780919c
1 Apr 2015 9a1f13339cc7d43930440c2350ea3060b72c8503
1 Apr 2015 1e76036421ca4d72c371182fc494af514911b099

I can get the date with this command:

git log | grep Date: | awk '{print  $4 " " $3 " " $6}'

and fixing with

git log | grep commit | awk '{print $2}'

How can I combine commands to print both results on the same line?

Here is an example git log:

commit 1e76036421ca4d72c371182fc494af514911b099
Author: xxxx
Date:   Wed Apr 1 17:35:36 2015 +0200

    First web app commit

    First web app commit

commit 9a1f13339cc7d43930440c2350ea3060b72c8503
Author: xxxx
Date:   Wed Apr 1 17:28:42 2015 +0200

   change from app to website

commit b6959eafe0df6031485509c539e22eaf2780919c
Author: xxx
Date:   Thu Mar 19 18:58:33 2015 +0100

   First remote commit: hello world

    scheleton of the project now available

commit a41d419de46a59e72dbc52e5f39c9d8a8a9af72a
Author: xxxx
Date:   Thu Mar 19 17:31:16 2015 +0100

    Initial commit
+4
source share
6 answers

The git log command is powerful enough to handle this on its own. Play with variations on this:

git log --date=iso --pretty=format:"date={%ad}, commit={%H}"

For me, these outputs are:

date={2014-12-12 14:14:23 -0800}, commit={75390af8bcd42c4dde6d841dc53f66a9ca91f460}
date={2014-12-09 18:53:32 -0800}, commit={8dcf9eb10611e6ac778e518cf37efb041c69f5b5}
date={2014-12-11 17:17:26 -0800}, commit={c3c1120b6dda6b317e1de5c7fe4eed7c8741ea1a}

To achieve the exact format you specified (although with a date formatted a little more reasonably), try the following:

 ​git log --date=short --pretty=format:"%ad %H"

Which brings out things like:

2015-08-18 1d0ca5a596f02958c4ba8ff269def3f235c64495
2015-08-18 d92fc3ebb62d2ca3e24322db2b669fdaebde7ea1
2015-08-18 6ba3970620e19699c2969b1eed5c479b07b8908a
+4
source

grep | awk, awk .

, grep Date: | awk '{print $4 " " $3 " " $6}' awk '/Date:/ {print $4 " " $3 " " $6}', grep commit | awk '{print $2}' awk '/commit/ {print $2}'.

, , .

awk-.

git log | awk '
    # Print the header line (remove if you do not want it).
    BEGIN {print "Date Commit"}
    /^commit/ {
        # Save the current commit
        commit=$2
        # Skip to the next line
        next
    }
    /^Date:/ {
        # Print the fields from the current line and the saved commit
        print $4, $3, $6, commit
        # Clear the saved commit Just in Case
        commit=""
    }
'

, git log:

$ git log --format='%ad %H' --date=short
2015-03-19 b6959eafe0df6031485509c539e22eaf2780919c
2015-04-1 9a1f13339cc7d43930440c2350ea3060b72c8503
2015-04-1 1e76036421ca4d72c371182fc494af514911b099

awk, . ( , /.)

+1

git log -2 --pretty=format:"%aD %H", , :

Fri, 28 Aug 2015 18:11:24 +0900 4c087df377e58b16c45beb32b4aebae6d2d0fa35
Sun, 23 Aug 2015 21:38:55 +0900 2d6543a124b46c5b9e8b7d645659e9a187dcd3c1
Sun, 16 Aug 2015 18:27:26 +0900 0cb0811124baa18a6baf5c13660affc18d86e725
Sun, 16 Aug 2015 15:21:55 +0900 072870e0f9659fc8ca8012099d689a9e0d020f6e
+1

:

git log | awk '/^commit / { commit = $2 }
               /^Date: /  { printf "%s %s %s %s\n", $4, $3, $6, commit }'

Capturing commit data in commit variable. When the date arrives, print the date and commit data.

Often there is bad output to output output grepto awk; awkworks great with filtering grep.

0
source

That would do

git log -5 --pretty=format:"%ad %H" | awk '{print $3, $2, $5, $7}'

10 Aug 2015 9fb4b1b5e7bcbc7f55e40ceae1758a7288673a51
10 Aug 2015 3d613862ca53787c97a42e8e2c37e09c8752b637
7 Aug 2015 727af2863dbe9f7b4da9189bc12f97a99aac5705
7 Aug 2015 1438b43b5755079bb3e62c819bfef2629d8336e9
7 Aug 2015 34303c19fb11482d66fc3c1102bc8d8b433af21a
0
source

All Articles