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:
git logcommit a3f1d2e4b5c6789012345678901234567890abcd
Author: Jane Smith <jane@example.com>
Date: Mon Mar 10 14:22:31 2026 +0100
Add user authentication module
commit 7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c
Author: John Doe <john@example.com>
Date: Fri Mar 7 09:15:04 2026 +0100
Fix login form validationEach 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:
git log --onelinea3f1d2e Add user authentication module
7b8c9d0 Fix login form validation
c1d2e3f Update README with setup instructionsThis 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:
git log -n 5You can also write it without the space:
git log -5Filtering 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:
git log --author="Jane"To match multiple authors, pass --author more than once:
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:
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:
git log --grep="authentication"The search is case-sensitive by default. Add -i to make it case-insensitive:
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:
git log --statcommit a3f1d2e4b5c6789012345678901234567890abcd
Author: Jane Smith <jane@example.com>
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):
git log -pCombine with -n to limit the output:
git log -p -3Viewing History of a Specific File
To see only the commits that touched a particular file, pass the file path after --:
git log -- path/to/file.pyThe -- 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:
git log -p -- path/to/file.pyBranch and Graph View
To visualize how branches diverge and merge, use --graph:
git log --oneline --graph* a3f1d2e Add user authentication module
* 7b8c9d0 Fix login form validation
| * 3e4f5a6 WIP: dark mode toggle
|/
* c1d2e3f Update README with setup instructionsAdd --all to include all branches, not just the current one:
git log --oneline --graph --allThis 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:
git log main..feature-branchThis 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:
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 validationExcluding Merge Commits
To hide merge commits and see only substantive changes, use --no-merges:
git log --no-merges --onelineQuick 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
.
Tags
Linuxize Weekly Newsletter
A quick weekly roundup of new tutorials, news, and tips.
About the authors

Dejan Panovski
Dejan Panovski is the founder of Linuxize, an RHCSA-certified Linux system administrator and DevOps engineer based in Skopje, Macedonia. Author of 800+ Linux tutorials with 20+ years of experience turning complex Linux tasks into clear, reliable guides.
View author page