Git Log

The git log command provides information regarding the history of the repository.

 

There is a lot of history information that can be accessed using the log command and there is many options to format and filter this information.

Anatomy of a Command

git

 

[program]

log

 

[command]

--oneline

 

[options]

Breakdown of how to use git log

at the command line in your shell

--graph

 

[options]

Default Output

Each output shows:

  • SHA-1 checksum
  • Author’s name and email
  • Date written
  • Commit message.
git log

Default Example

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Mary Smith <msith@example.com>
Date:   Sat Mar 3 16:40:33 2007 -0700

    removed unnecessary test

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Mary Smith <msith@example.com>
Date:   Sat Mar 1 10:31:28 2007 -0700

    first commit

Formatting Options

There are two basic ways to format the log output.

Built-in Formatting

Custom Formatting

--oneline
--pretty=format:"your custom string"

Built-in Formats

The built-in formats are preconfigured options you can use for displaying commonly used output.

One Line

The --oneline option reduces the output to one line of abbreviated information. This is helpful to get a quick overview of recent repository information.

git log --oneline

a90b071 Fixup typo in readme file.
2f5276b Update readme description.
a21337a Set spacing to align text output.
5829ca9 Merge pull request #1 from repository/branch
fdf62a4 First commit.

Decorate

git log --oneline --decorate

a90b071 (HEAD -> master, origin/master) Fixup typo in readme file.
2f5276b Update readme description.
a21337a (tag: your-tag) Set spacing to align text output.
5829ca9 Merge pull request #1 from repository/branch
fdf62a4 First commit.

The --decorate option will display branch and tag information.

It is common to combine the oneline and decorate option.

Graph

git log --oneline --graph

* a90b071 Fixup readme file.
* 2f5276b Improve readme.
* a21337a Set spacing to align text output.
*   5829ca9 Merge pull request #1 from repository/branch
|\
| * fdf62a4 Experiment with branch name.
| * df77cdc Change shell declaration.
|/
* f958f93 Start branch loop.
* 6f4fd45 Git comment notes for use.
* e4b884f Start bash file.
* e68d143 First commit.

The --graph option will give you a visual display of the branches.

 

The graph shows ASCII characters creating lines and asterisks.

Diffs

There are options for displaying diffs in your history.

-p    for showing the patch

--stat    for showing file changed stats

The two most common options are:

Stat Example

git log --stat

* a90b071 (HEAD -> master, origin/master) Fixup readme file.
|  README.md | 3 +++
|  1 file changed, 3 insertions(+)
* 2f5276b Improve readme file content.
|  README.md | 5 +++++
|  1 file changed, 5 insertions(+)
* a21337a Set spacing to align text output.
|  branches.sh | 4 ++--
|  1 file changed, 2 insertions(+), 2 deletions(-)
*   5829ca9 Merge pull request #12 from repository/branch
|\
| * e57ba7a Changed while loop to a for in.
| |  branches.sh | 19 +++++++++----------
| |  1 file changed, 9 insertions(+), 10 deletions(-)
| * fdf62a4 Change with branch name.
| |  branches.sh | 11 +++++------
| |  1 file changed, 5 insertions(+), 6 deletions(-)
| * df77cdc Change shell declaration.
|/
|    branches.sh | 2 +-
|    1 file changed, 1 insertion(+), 1 deletion(-)
* a68ff57 Start readme file.
|  README.md | 2 ++
|  1 file changed, 2 insertions(+)
* f958f93 Start branch loop.
|  branches.sh | 11 +++++++++++
|  1 file changed, 11 insertions(+)

Shortlog

The shortlog command will group commits by author and display a short commit message.

You can sort the output by number of commits per author using the -n option.

git shortlog

Mary Smith (4):
    First commit.
    Start binary file.
    Git comment notes for use in readme.
    Edit readme file.

Joe Willis (3)
    Add method callback.
    Delete unused variable.
    Fix typo.

Custom Formatting

If you don't like the built-in formatting options, or just want to create additional output information, you can customize your own log output format.

Create your custom output by using:

--pretty=format:"string"

The format string may be enclosed in quotes and can contain replacement placeholders.

%cn     will give you committer name
%h        will display the commit hash
%cd     will show the commit date

Custom Example

Placeholder example with custom formatting

git log --pretty=format:"%h - %cn made this commit on %cd"

a90b071 - Mary Smith made this commit on Thu Dec 17 23:18:07 2015 -0500
2f5276b - Mary Smith made this commit on Thu Dec 17 23:18:07 2015 -0500
a21337a - Mary Smith made this commit on Thu Dec 17 23:04:20 2015 -0500
5829ca9 - Mary Smith made this commit on Mon Nov 9 21:37:06 2015 -0500
fdf62a4 - Mary Smith made this commit on Mon Nov 9 20:24:32 2015 -0500
a68ff57 - Mary Smith made this commit on Mon Nov 9 19:23:39 2015 -0500
f958f93 - Mary Smith made this commit on Fri Sep 25 17:22:48 2015 -0400
e4b884f - Mary Smith made this commit on Fri Sep 25 17:02:40 2015 -0400

Combine Format Types

git log --graph --pretty=format:"%h - %cn made this commit on %cd"

You can also combine the built-in options

with your custom format.

Custom Color

You can use color in you custom output as well.

Check color setting in your Git config for options.

%Cred         switch color to red
%Cgreen    switch color to green
%Cblue       switch color to blue
%Creset     reset color

git log --pretty=format:"%Cred %h %Creset %s %Cblue %cr %Creset"

Filtering Output

By default Git will show all commit history in your log output.

 

After a short amount of time, too much information is shown.

Git provides a ways to filter or limit

the output of your log command.

Filter Count

Reduce the amount of history shown with your log output with a number option like:

-5

 

This will limit the output to only show the last 5 commits.

 

Example to only show 5 commits and a built-in option:

git log --oneline -5

Filter by Date

You can filter by date using different date expressions.

git log --after="2012-11-1"

git log --since="1 year ago"

Filter by File

You can filter by file(s) by listing the file name(s).

 

Important note to remember to use the -- flag to indicate the following are file names and not branch names.


git log -- my_file.module my_file.inc

Filter by Commit Messages

To filter commit messages use:

--grep


git log --grep="Issue 42"

Filter by Content

You can search and filter the source code

for a particular string by using:

-S"your string"

 

 

This is also know as pickaxe.


git log -S"variable = 42"

Git Configuration

Many of the default configurations for the log output can be changed or set via your gitconfig file.

There are many options for filtering by date, file, range, and branches. Check the Git documentation of all the options.

Alias Custom Commands

Once you have created a few custom log formatting commands, it makes it much easier to recall them if you create an alias for them.

You can create an alias in your gitconfig file by using the keyword [alias]

You can also create a shell alias for your favorite commands.

Alias Examples

Set alias from command line:

Manually set in gitconfig file:


git config --global alias.last 'log -1 HEAD'
[alias]
    st = status
    co = checkout
    br = branch

alias gl='git log --oneline --graph --decorate -12'
alias gls='git log --oneline --graph --decorate --stat'

Create an alias in your shell profile configuration:

</the end>

https://slides.com/mikebarkas/customize-git-log-format

Customizing Git Log Output

By mikebarkas

Customizing Git Log Output

Basic overview of the Git log command and a few examples.

  • 156