View git log without merge commits
Asked Answered
T

3

159

I'm trying to view commits made by a specific user, and want to remove any merges done by the user from the output. How can I do so?

I can check for the commits of a user using git log --author=<name>, but can't remove the merge commits in the output.

PS: Merge conflicts do not happen in the workflow of the repo in question, all branches are rebased before merging into master so it is safe to remove the merge commits from the output, and similarly, two feature branches are not merged with one another raising the possiblity.

Tiberias answered 11/3, 2016 at 17:0 Comment(4)
What if the merge had a conflict and he had to resolve it?Enallage
@JoePhilllips That doesn't happen in the workflow of the repo in question, all branches are rebased before merging into master.Tiberias
related: Showing commits made directly to a branch, ignoring merges in Git, How to do Git Log see only merges to master branch?Humberto
Here is my question which is kind of the opposite: How to view a linear git log (exclude feature commits), showing only commits to main or merges to mainTishtisha
N
264

use

git log --author=<name> --no-merges

Additionally the --first-parent option may give useful result for you:

--first-parent

Follow only the first parent commit upon seeing a merge commit. This option can give a better overview when viewing the evolution of a particular topic branch, because merges into a topic branch tend to be only about adjusting to updated upstream from time to time, and this option allows you to ignore the individual commits brought in to your history by such a merge. Cannot be combined with --bisect.

Neufer answered 11/3, 2016 at 17:9 Comment(5)
even nicer with --pretty=format:"%h%x09%an%x09%ad%x09%s"Indigo
@Indigo this truncates the commit body (assuming there's one)Erasmo
@Erasmo understood, and I find it useful to get a concise readable summary of the commits.Indigo
Or including colors and graph log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --first-parentEpiclesis
using this command gives you a clean list of changes, then u can take the commits with git cherry-pick <commit> , thanks :DBridwell
H
28

You can omit merges with --no-merges:

git log --no-merges --author=<name>

See the git log manpage for details.

Humberto answered 11/3, 2016 at 17:7 Comment(1)
This only excludes the merge commits. But the normal commits inside that upstream branch is still visible.Interspace
S
19

The OP's question has been answered. I expounded on the answer for the lurkers. This lengthy log call will give you a nice view filtered by committer sans merge. Use git alias to tame this if you desire.

I hope it benefits someone and isn't treated too harshly with down-votes.

git log --no-merges --max-count=15 --pretty="format:%C(dim green) %<(9,trunc)%ar %C(bold magenta)%h %C(bold green)%<(12,trunc)%an %C(bold
yellow)%<(113,trunc)%s" --committer="<name>"

Example: enter image description here

Shortfall answered 28/4, 2021 at 17:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.