git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Merge commit diff results are confusing and inconsistent

From
RDRobert Dailey <rcdailey.lists@gmail.com>
Date
May 3, 2019, 15:55 UTC
Message-ID
<CAHd499BEHd79zL76um2oB4YMdScM2icrMXstg1g=xwdBqk43EQ@mail.gmail.com>

I'm hoping this is mostly a learning opportunity for me. I'm assuming things are working as designed, but I just don't understand something fundamental.

I have a merge commit. HEAD is currently pointing at this merge commit. To be exact, HEAD points to master, which points to the merge commit. My goal is to diff only the changes in the merge commit (stuff committed directly in the merge commit, such as conflict resolutions). To start out, I learned about @^@, @^!, and @^-. @^! sounded like what I wanted. It gives me this output:

$ git rev-parse @^! 21f5a4b9fee4f12e7793919f65361d2c16f7d240 ^14bd840c1d591c9dc066ed1aab59b5ec14d502bb ^944af379480826764f2f31b67848e2885b95b4a6

Perfect. This should give me just the diff of 21f5... and exclude everything else, right? So I did this:

$ git diff @^!

However, I get *all* changes on the branch (second parent) and changes in the merge commit itself. Basically it acts as if I used @^-, which seems wrong to me. So to test another angle, I used the revisions output by rev-parse directly:

$ git diff 21f5a4b9fee4f12e7793919f65361d2c16f7d240 ^14bd840c1d591c9dc066ed1aab59b5ec14d502bb ^944af379480826764f2f31b67848e2885b95b4a6

Interestingly, this showed me only the changes in the merge commit (21f5a4) and nothing else. Between this command and @^!, I feel the two are exactly the same. So why does @^! not work as I expect, but explicitly specifying the revisions does? What am I missing here?

When I use @^! in `git log`, I do only see the merge commit and no other commits. So at least log is treating it correctly.

$ git version git version 2.20.1.windows.1

Next: Eckhard Maaß
Message 1 of 12 in “Merge commit diff results are confusing and inconsistent”
  1. Robert DaileyMay 3, 2019
  2. Eckhard MaaßMay 3, 2019
  3. Robert DaileyMay 6, 2019
  4. Eckhard MaaßMay 6, 2019
  5. Ævar Arnfjörð BjarmasonMay 6, 2019
  6. Robert DaileyMay 7, 2019
  7. Robert DaileyMay 7, 2019
  8. Denton LiuMay 7, 2019
  9. Eckhard MaaßMay 7, 2019
  10. Ævar Arnfjörð BjarmasonMay 7, 2019
  11. Elijah NewrenMay 7, 2019
  12. Philip OakleyMay 11, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.