How to see commits that were merged in to a merge commit?

GitBranchGit MergeGit CommitGit Log

Git Problem Overview


If my-feature-branch was merged into my-main-branch, how can I see what commits were merged in from my-feature-branch?

Git Solutions


Solution 1 - Git

git log abc123^..abc123
shows the commits that got merged into merge-commit abc123.

Create a git alias log-merge for easy reuse:

$ git config --global alias.log-merge \
'!f() { git log --stat "$1^..$1"; }; f'
$ git log-merge abc123

For a one-line version:

$ git config --global alias.log-merge-short \
'!f() { git log --pretty=oneline "$1^..$1"; }; f' 

Solution 2 - Git

If you want to see every commits merged in the last merge you can try that :

git log $(git merge-base --octopus \
$(git log -1 --merges --pretty=format:%P)).. --boundary

Here is an example of my current log :

$ git log --graph --pretty=oneline --abbrev-commit
* 44899b9 pouf
*   8f49f9c Merge branch 'test'
|\  
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/  
* 8fae178 pif2
* 20f8ba6 init

If I only want commits related to the last merge I have to use git log -1 --merges --pretty=format:%P which gives me the parents of the first merge available :

$ git log -1 --merges --pretty=format:%P
69f431cec7859b61d33c7503c9431ceea2aaf3e0 3db39ca3ab1e8f70462db23d94590628b5e7ad7b

Now that I know which parents I need to track, I need their common base that I can obtain through git merge-base --octopus (--octopus is there just in case) :

$ git merge-base --octopus \
$(git log -1 --merges \
--pretty=format:%P)
8fae178666e34a480b22e40f858efd9e7c66c3ca

Now with git log I can search every commit since the base to the current HEAD:

$ git log $(git merge-base --octopus \
$(git log -1 --merges --pretty=format:%P)).. \
--boundary --graph --pretty=oneline --abbrev-commit 
* 44899b9 pouf
*   8f49f9c Merge branch 'test'
|\  
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/  
o 8fae178 pif2

If you're a bit perfectionist you can also do this :

$ git log 
$(git merge-base --octopus \
$(git log -1 \
--merges --pretty=format:%P))..$(git log -1 --merges --pretty=format:%H) \
--boundary --graph --pretty=oneline --abbrev-commit 
*   8f49f9c Merge branch 'test'
|\  
| * 3db39ca test
* | 69f431c pif
* | df1f51c lala
|/  
o 8fae178 pif2

Now I think I'll keep this as an alias :)

The --graph --pretty=oneline --abbrev-commit options are optional.


Resources :

Solution 3 - Git

If you have a merge commit (say a2345) and say git log -1 a2345, it will tell you the names of the parents (i.e. the commits which got merged in this commit). Is that what you're looking for?

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionThe Pixel DeveloperView Question on Stackoverflow
Solution 1 - GitJesseView Answer on Stackoverflow
Solution 2 - GitColin HebertView Answer on Stackoverflow
Solution 3 - GitNoufal IbrahimView Answer on Stackoverflow