git log Command: View Commit History
Every commit in a Git repository is recorded in the project history. The git log command lets you browse that history — showing who made each change, when, and why. It is one of the most frequently used Git commands and one of the most flexible.
This guide explains how to use git log to view, filter, and format commit history.
Basic Usage
Run git log with no arguments to see the full commit history of the current branch, starting from the most recent commit:
Terminal
git log
commit a3f1d2e4b5c6789012345678901234567890abcd
Author: Jane Smith <[email protected]>
Date: Mon Mar 10 14:22:31 2026 +0100
Add user authentication module
commit 7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c
Author: John Doe <[email protected]>
Date: Fri Mar 7 09:15:04 2026 +0100
Fix login form validation
Each entry shows the full commit hash, author name and email, date, and commit message. Press q to exit the log view.
Compact Output with –oneline
The default output is verbose. Use --oneline to show one commit per line — the abbreviated hash and the subject line only:
Terminal
git log --oneline
a3f1d2e Add user authentication module
7b8c9d0 Fix login form validation
c1d2e3f Update README with setup instructions
This is useful for a quick overview of recent work.
Limiting the Number of Commits
To show only the last N commits, pass -n followed by the number:
Terminal
git log -n 5
You can also write it without the space:
Terminal
git log -5
Filtering by Author
Use --author to show only commits by a specific person. The value is matched as a substring against the author name or email:
Terminal
git log --author="Jane"
To match multiple authors, pass --author more than once:
Terminal
git log --author="Jane" --author="John"
Filtering by Date
Use --since and --until to limit commits to a date range. These options accept a variety of formats:
Terminal
git log --since="2 weeks ago"
git log --since="2026-03-01" --until="2026-03-15"
Searching Commit Messages
Use --grep to find commits whose message contains a keyword:
Terminal
git log --grep="authentication"
The search is case-sensitive by default. Add -i to make it case-insensitive:
Terminal
git log -i --grep="fix"
Viewing Changed Files
To see a summary of which files were changed in each commit without the full diff, use --stat:
Terminal
git log --stat
commit a3f1d2e4b5c6789012345678901234567890abcd
Author: Jane Smith <[email protected]>
Date: Mon Mar 10 14:22:31 2026 +0100
Add user authentication module
src/auth.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++++
src/models.py | 12 +++++++
tests/test_auth.py | 45 +++++++++++++++++
3 files changed, 141 insertions(+)
To see the full diff for each commit, use -p (or --patch):
Terminal
git log -p
Combine with -n to limit the output:
Terminal
git log -p -3
Viewing History of a Specific File
To see only the commits that touched a particular file, pass the file path after --:
Terminal
git log -- path/to/file.py
The -- separator tells Git that what follows is a path, not a branch name. Add -p to see the exact changes made to that file in each commit:
Terminal
git log -p -- path/to/file.py
Branch and Graph View
To visualize how branches diverge and merge, use --graph:
Terminal
git log --oneline --graph
* a3f1d2e Add user authentication module
* 7b8c9d0 Fix login form validation
| * 3e4f5a6 WIP: dark mode toggle
|/
* c1d2e3f Update README with setup instructions
Add --all to include all branches, not just the current one:
Terminal
git log --oneline --graph --all
This gives a full picture of the repository’s branch and merge history.
Comparing Two Branches
To see commits that are in one branch but not another, use the .. notation:
Terminal
git log main..feature-branch
This shows commits reachable from feature-branch that are not yet in main — useful for reviewing what a branch adds before merging.
Custom Output Format
Use --pretty=format: to define exactly what each log line shows. Some useful placeholders:
%h— abbreviated commit hash%an— author name%ar— author date, relative%s— subject (first line of commit message)
For example:
Terminal
git log --pretty=format:"%h %an %ar %s"
a3f1d2e Jane Smith 5 days ago Add user authentication module
7b8c9d0 John Doe 8 days ago Fix login form validation
Excluding Merge Commits
To hide merge commits and see only substantive changes, use --no-merges:
Terminal
git log --no-merges --oneline
Quick Reference
For a printable quick reference, see the Git cheatsheet
.
| Command | Description |
|---|---|
git log |
Full commit history |
git log --oneline |
One line per commit |
git log -n 10 |
Last 10 commits |
git log --author="Name" |
Filter by author |
git log --since="2 weeks ago" |
Filter by date |
git log --grep="keyword" |
Search commit messages |
git log --stat |
Show changed files per commit |
git log -p |
Show full diff per commit |
git log -- file |
History of a specific file |
git log --oneline --graph |
Visual branch graph |
git log --oneline --graph --all |
Graph of all branches |
git log main..feature |
Commits in feature not in main |
git log --no-merges |
Exclude merge commits |
git log --pretty=format:"%h %an %s" |
Custom output format |
FAQ
How do I search for a commit that changed a specific piece of code?
Use -S (the “pickaxe” option) to find commits that added or removed a specific string: git log -S "function_name". For regex patterns, use -G "pattern" instead.
How do I see who last changed each line of a file?
Use git blame path/to/file. It annotates every line with the commit hash, author, and date of the last change.
What is the difference between git log and git reflog?
git log shows the commit history of the current branch. git reflog shows every movement of HEAD — including commits that were reset, rebased, or are no longer reachable from any branch. It is the main recovery tool if you lose commits accidentally.
How do I find a commit by its message?
Use git log --grep="search term". For case-insensitive search add -i. If you need to search the full commit message body as well as the subject, add --all-match only when combining multiple --grep patterns, or use git log --grep="search term" --format=full to inspect matching commits more closely. Use -E only when you need extended regular expressions in the grep pattern.
How do I show a single commit in full detail?
Use git show <hash>. It prints the commit metadata and the full diff. To show just the files changed without the diff, use git show --stat <hash>.
Conclusion
git log is the primary tool for understanding a project’s history. Start with --oneline for a quick overview, use --graph --all to visualize branches, and combine --author, --since, and --grep to zero in on specific changes. For undoing commits found in the log, see the git revert guide
or how to undo the last commit
.
