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

28,019

Solution 1

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 2

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' 
Share:
28,019
The Pixel Developer
Author by

The Pixel Developer

Updated on October 31, 2021

Comments

  • The Pixel Developer
    The Pixel Developer over 2 years

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

  • The Pixel Developer
    The Pixel Developer almost 13 years
    Yep, that's what I wanted (only showing 1 commit though). I assume you can do this for the normal git log view too?
  • Noufal Ibrahim
    Noufal Ibrahim almost 13 years
    Yes. If you want to browse parents of a larger number of commits, the GUI (gitk) is more useful. The restriction to a single commit is because of the -1. Drop that and you'll get the regular log.
  • knocte
    knocte about 7 years
    if I drop the -1 it shows all the log of all commit messages, this seems not useful
  • glade
    glade about 4 years
    This solution is great. I modified a version of the command so we could get a "short" version: $ git config --global alias.merge-log-short '!f() { git log --pretty=oneline "$1^..$1"; }; f'
  • Tal Jacob - Sir Jacques
    Tal Jacob - Sir Jacques about 2 years
    git log --graph --oneline is a shortcut for git log --graph --pretty=oneline --abbrev-commit.
  • Tal Jacob - Sir Jacques
    Tal Jacob - Sir Jacques about 2 years
    I made this answer more comfortable for daily use in this repository. You are welcome to use this.