Practical Git via GitExtensions
  • Git - a Distributed System
  • Bare Minimal Configurations
  • Creating a New Branch
  • Making a Commit
    • Adding only a portion of a file
    • Commit Message
    • Cherry-pick
    • Revert
  • Rewriting History
    • Rewording the Last Commit
    • Rewording Commit Message in Middle
    • Editing the Last Commit
    • Squashing Last Few Commits
    • Squashing Commits in Middle
    • Spliting Commit into Multiple
    • Removing a Commit
    • Pushing after Rewriting History
  • Lost and Found
  • Comparing Commits or Branches
  • Checking out a Branch into Another Folder
  • Blaming History
    • Blame
    • Bisect
  • Disabling Auto Tracking Branch
  • Line Ending
  • Ignore Unwanted Files
Powered by GitBook
On this page

Was this helpful?

  1. Rewriting History

Squashing Commits in Middle

PreviousSquashing Last Few CommitsNextSpliting Commit into Multiple

Last updated 6 years ago

Was this helpful?

If the commits to be squahed are not the last few commits, an interactive rebase is needed. Similar to how we reword commits in middle, we start an interactive rebase, but this time instead of reword, we change the pick to s or squash for the second commit meaning squash the second up into the first commit.

pick d310b7c35 WIP: Fix blah blah
s f3ee84093 WIP: Continue Fix blah blah
pick 07ec28ec2 Fix another stupid bug

After saved and closed the Editor, Git then will popup the Editor asking for the new commit message of the squashed commits.

# This is a combination of 2 commits.
# This is the 1st commit message:

WIP: Fix blah blah

# This is the commit message #1:

WIP: Continue Fix blah blah

We now need to replace the WIP: Fix blah blah with a new commit message Fix blahblahand remove the WIP: Continue Fix blah blah.

Once finished it looks like below (I created a before_rebase branch so we can see it more clearly):

The fixup option: fixup is very similar to squash except that fixup uses the commit message of the first commit whereas squash requires a new commit message.