Skip to content

Instantly share code, notes, and snippets.

@liubin
Forked from jbub/squash-commits.sh
Last active January 19, 2018 08:11
Show Gist options
  • Save liubin/b5cfcef9504bca3af4e1a395c2b72e0e to your computer and use it in GitHub Desktop.
Save liubin/b5cfcef9504bca3af4e1a395c2b72e0e to your computer and use it in GitHub Desktop.
git squash last two commits into one

1

git rebase --interactive HEAD~2

#  we are going to squash c into b 
pick b76d157 b
pick a931ac7 c

# squash c into b
pick b76d157 b
s a931ac7 c

# after that just edit the commit message

# This is a combination of 2 commits.
# The first commit's message is:

b

# This is the 2nd commit message:

c

2

git reset --soft HEAD~2 # notice this is 2, not 3
git commit --amend

From:

commit 1
commit 2
commit 3

to:

commit 1 # this will include commit 2 and commit 3

Or

git reset --soft HEAD~2
git commit --amend -C HEAD # this will automatically pick `commit 1` as the commit name

3

I have this in my git config:

fixup = "!f(){ git reset --soft HEAD~${1} && git commit --amend -C HEAD; };f"

And I use it as

git fixup 2 # merges the last 2 commits into their parent
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment