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.
The normal output of the log command shows the author, date, and commit information on multiple lines.
In this article I describe a few of the methods I use to display commit history information in a few different ways.
I will start by describing a few of the options available and then describe how I use a couple of them.
The two broad categories described below are built-in formatting and custom formatting.
There are options you can use via the command line to use the built-in log formatting to display commonly used output.
--oneline option reduces the commit information to one line of abbreviated
information. This is helpful to get a quick overview of recent repository
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 option will display branch and tag
information. It is very common to combine the above oneline command above
with the decorate option.
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.
--graph option will give you a visual representation
of the branches and how they were merged together. The graph only shows ASCII
characters creating lines and asterisks, but it is enough to create a visual
reference that is easy to understand.
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.
There are a lot of options for displaying diffs in your commit history. The two most common options are the
-p option, for
patch, and the
--stat option for showing stats of inserted and deleted
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 command will group commits by author and
display a short commit message. This is a command to be used instead of the
log command. You can sort the output by number of commits per author using the
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.
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 the
--pretty option and use
format:"string". The format string may be enclosed in quotes and
can contain replacement placeholders.
%cnwill give you committer name
%hwill display the commit hash
%cdwill show the commit date
Using the placeholders above in an example for git log 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
There are many placeholder tokens available to create your custom log output. See the Git log documentation for all options.
You can also combine your custom format and built-in options.
git log --oneline --pretty=format:"%h - %cn made this commit on %cd"`
You can use basic colors in you custom output as well. Check your color setting in your Git config for options.
Color token examples:
%Credswitch color to red
%Cgreenswitch color to green
%Cblueswitch color to blue
Remember to turn off a color, using reset, after you are finished to return your terminal color back to normal.
Changing log output color example:
git log --pretty=format:"%C(green)[%h]%Creset %gd %s %C(yellow)(%cr)%Creset"
By default Git will show all commit history in your log output. After a short amount of time, this will display too much information.
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 --online -5
You can filter by date using different date expressions.
git log --after="2012-11-1" git log --since="1 year ago"
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 -- product_models.py
To filter commit messages use the
git log --grep="Issue 42"
You can search and filter the source code for a particular string by using the
-S"your string" option. This is also know as
git log -S"variable = 42"
There are many options for filtering by date, file, range, and branches. Check the Git documentation of all the options.
Many of the default configurations for the log output can be changed or set via your
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.
I personally use a shell alias so I can also include the git in my command.
Here is an example of the four log commands I use most often set up in my shell as an alias:
My standard git log limited by 10-12 commits so it fits in my Tmux pane nicely.
alias gl='git log --oneline --graph --decorate -12'
This is my git log long alias to display more information and use color.
alias gll='git log --pretty=format:"%C(green)[%h]%Creset %gd %s %C(yellow)(%cr)%Creset %C(cyan)%cn%Creset" --graph'
My alias for git log people to use the output of shortlog.
alias glp='git shortlog'
This is what I call git log stats.
alias gls='git log --oneline --graph --decorate --stat'
Use the buit-in log formats and experiment creating your own custom log commands.
Create a shortcut or alias for the commands you use most often.
Consult the Git documentation for the many options available.