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

前端 未结 5 1609
时光说笑
时光说笑 2021-01-19 05:59

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

Date Commit
19 Mar 2015 b6959eafe0df6031485509c539e22eaf2780919c
1 Apr 2015 9a         


        
相关标签:
5条回答
  • 2021-01-19 06:28

    You more-or-less never need grep | awk as awk can do the matching for you.

    So grep Date: | awk '{print $4 " " $3 " " $6}' can be rewritten as awk '/Date:/ {print $4 " " $3 " " $6}' and grep commit | awk '{print $2}' can be rewritten as awk '/commit/ {print $2}'.

    That should be enough to give you the first inklings of how to solve your problem.

    Combine the awk scripts.

    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=""
        }
    '
    

    That being said you can get almost the format you want from git log itself:

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

    Which you could convert to your desired output with some awk if you wanted. (Transposing the date fields is trivial, converting to the month names would require some more code/work.)

    0 讨论(0)
  • 2021-01-19 06:29

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

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

    For me this outputs:

    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 (though with the date formatted a bit more reasonably), try this:

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

    Which outputs things like:

    2015-08-18 1d0ca5a596f02958c4ba8ff269def3f235c64495
    2015-08-18 d92fc3ebb62d2ca3e24322db2b669fdaebde7ea1
    2015-08-18 6ba3970620e19699c2969b1eed5c479b07b8908a
    
    0 讨论(0)
  • 2021-01-19 06:30

    How about:

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

    Capture the commit information in the variable commit. When a date comes along, print the date and commit information.

    It is often a bad idea to pipe the output of grep to awk; awk is perfectly capable of doing the filtering that grep does.

    0 讨论(0)
  • 2021-01-19 06:45

    This 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 讨论(0)
  • 2021-01-19 06:48

    You may be find your solution with pretty format ?

    http://git-scm.com/docs/pretty-formats

    0 讨论(0)
提交回复
热议问题