git log;
Following my last blog you can access below;
I am going to share some Git log commands that will be helpful to you in your VCS journey.
If you’ve read my previous article, you’re already familiar with Git and its usage. For those who haven’t, Git log is a powerful command that allows you to review the commit history in a Git repository and offers various options to filter out the commit messages based on your needs.
Now without any further delay, let’s jump to the git log options
Let’s dive into git log options!
Log all
First and foremost, Git log command is used to list all the commit messages of the branch including the information about the commit author and date of commit along with the commit hash and message.
git log
If you don’t know what branch is, don’t worry we will discuss it in upcoming articles.
Filter the Commits
Get n commits
You are least likely to use this option since by default Git provides only the commit messages that fit into your terminal. But if you anyhow still want to get a specific number of commits only you can do so by using -n option.
git log -n 5
Filter commits by Date
You can also filter commits based on when they are committed. Git provides you with the option to filter the commits after the specified date using –since, –after, and to get the commits before the specified date using –until, and –before.
Also, these commands work with both specific and relative dates.
git log –since=“2 weeks ago”
# or by using –after
git log –after=“2 weeks ago”# show commits until January 1, 2024
git log –until=“2024-01-01”
# or by using –before
git log –before=“2024-01-01”
It is also recommended that for consistent behavior you specify the timezone git log –date=local …
Filter by Author
Sometimes you might want to filter the commits by author. I mostly need it to filter out my commits when before the scrum meeting to prepare my status. But hey, it has many good uses as well, which obviously doesn’t include stalking another dev.
git log –author=“Author Name”
Filter Commits based on Commit Messages
This is the most useful filter option that comes with git log. If you follow good commit message convention then this would greatly help you to filter specific types of commits like fix, build, ci, etc.
git log –grep=“fix”
Formatting Output
You can also format the log messages as it suits you by using the –pretty option.
Predefined Formats
oneline: Displays each commit on a single line.
short: Includes commit hash, author, date, and subject.
medium: Adds commit message and file changes.
full: Includes full commit information.
format: Allows custom formatting using placeholders (e.g., %H for commit hash, %an for author name, %s for subject).
git log –pretty=oneline# use –oneline for combining –pretty=oneline –abbrev-commit
git log –oneline# custom format with short hash and subject
git log –pretty=format:“%h – %s”
Custom Formatting
Or you can create custom formatting by utilizing specifiers.
Git log useful Specifiers
%H Commit hash
%h Abbreviated commit hash
%T Tree hash
%t Abbreviated tree hash
%P Parent hashes
%p Abbreviated parent hashes
%an Author name
%ae Author email
%ad Author date (format respects the –date=option)
%ar Author date, relative
%cn Committer name
%ce Committer email
%cd Committer date
%cr Committer date, relative
%s Subject
Viewing Commit Details
-p: Show the patch (diff) introduced by each commit.
–stat: Show statistics for each commit (added, deleted, modified files).
–shortstat: Show a summary of added, deleted, and modified files.
Other Useful Options
–graph: Display a commit graph.
–follow: Continue listing the history of a file beyond renames.
–reverse: Show commits in chronological order (oldest first).
–no-merges: Exclude merge commits.
–first-parent: Only follow the first parent commit of merge commits.
Combining Options
As I have mentioned above about –oneline, you can combine multiple options.
git log –author=“Author Name” –since=“1 month ago” –pretty=format:“%h – %s”# find bug fix commits from last week
git log –grep=“fix” –since=“1 week ago” –pretty=format:“%h – %s”
Advanced Usage
Commit Ranges: Specify a range of commits using commit1..commit2 syntax.
Refspecs: Use refspecs like origin/master..HEAD to compare branches.
Filtering by File: Use –path to filter commits based on file paths.
Interactive Rebasing: Use git rebase -i to edit commit history.
Cherry-Picking: Use git cherry-pick to apply specific commits to another branch.
Reference:
https://training.github.com/downloads/github-git-cheat-sheet/
https://git-scm.com/docs/git#_git_commands
https://git-scm.com/docs/giteveryday
Book: Pro Git