2
           f1---f2                 - short term branch "feature1"
          /       \
      h--h--h---h--h1--h2-         - long term branch "hofix"
     /       \   \      \
    /         \   \      \
   m----m------m---m------m--      - long term branch "master"
                   |      |
                 1e1e1e 2f2f2f

I merge branches with 2 commits difference (15 file changed totaly). And ran:

$ git show --pretty="format:" --name-only 1e1e1e..2f2f2f

I receive more than 42 000 file changed from my project. Why?

Expected: i will show diff with f1,f2,h1,h2 commits

P.S. May be because "Merge branch 'origin/0411-hotfix'" commit?

maxgu
  • 137
  • 1
  • 11

1 Answers1

5

1e1e1e..2f2f2f means:

  • all commits that are reachable from 2f2f2f
  • excluding those that are reachable from 1e1e1e

(See "SPECIFYING RANGE" from gitrevisions)

If those SHA1s reference the two commits merged, you have:

    1e1e1e
      |
x--x--x
       \
        Z
       /
y--y--y
      |
    2f2f2f

That would give you all the files from all 'y' commits, which can potentially go as far as the very first commit, and that means you get all the files.

However, since git diff doesn't take a range of commits (as opposed to git show), you can try, as in "How to “git show” a merge commit with combined diff output":

git diff --name-only 1e1e1e..2f2f2f

Or simply use the merge SHA1 'Z', as in "List all modified files in git merge commit - even the fast forwarded":

git log -m -1 --name-only --pretty="format:" <Merge SHA>
Community
  • 1
  • 1
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250