Search code examples
gitpatchsquashgit-squash

How do you squash commits into one patch with git format-patch?


I've got eight commits on a branch that I'd like to email to some people who aren't git enlightened, yet. So far, everything I do either gives me 8 patch files, or starts giving me patch files for every commit in the branch's history, since the beginning of time. I used git rebase --interactive to squash the commits, but now everything I try gives me zillions of patches from the beginning of time. What am I doing wrong?

git format-patch master HEAD # yields zillions of patches, even though there's 
                             # only one commit since master

Solution

  • I'd recommend doing this on a throwaway branch as follows. If your commits are in the "newlines" branch and you have switched back to your "master" branch already, this should do the trick:

    [adam@mbp2600 example (master)]$ git checkout -b tmpsquash
    Switched to a new branch "tmpsquash"
    
    [adam@mbp2600 example (tmpsquash)]$ git merge --squash newlines
    Updating 4d2de39..b6768b2
    Fast forward
    Squash commit -- not updating HEAD
     test.txt |    2 ++
     1 files changed, 2 insertions(+), 0 deletions(-)
    
    [adam@mbp2600 example (tmpsquash)]$ git commit -a -m "My squashed commits"
    [tmpsquash]: created 75b0a89: "My squashed commits"
     1 files changed, 2 insertions(+), 0 deletions(-)
    
    [adam@mbp2600 example (tmpsquash)]$ git format-patch master
    0001-My-squashed-commits.patch