michael
michael

Reputation: 110570

How can I combine 2 'git commit's

I have made 2 'git commit' locally. But I have not pushed, is it possible for me to edit my git and combine those 2 git commit into 1?

Upvotes: 5

Views: 1834

Answers (3)

Abizern
Abizern

Reputation: 150615

If you've made a commit and want to add some changes to it, you can use git commit --amend which will amend your last commit. If you want to do this without going through all the trouble of git rebasing then:

git checkout --soft HEAD~

This will remove the last commit without removing the changes and then

git commit --amend -C HEAD

which will modify the latest commit with the new changes in the index. The -C HEAD flags take the commit message from the head commit, so you don't even need to add the message again.

Upvotes: 4

Geoff Moller
Geoff Moller

Reputation: 798

There is another great article on squashing here: http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

Upvotes: 1

Eugene Sajine
Eugene Sajine

Reputation: 8200

Yes it is possible:

You have to first find the commit that is before the ones you want to work with. Imagine we want to combine last two commits:

git rebase -i HEAD~3

This will fire up an editor for interactive rebase that is giving you a possibility to perform so called squashing of the commits and it will list commits starting from one that is three commits ago.

PLEASE, read the help message in the fired up editor window to understand how to use interactive rebase. In order to cancel rebase operation you have to delete all lines from the file and save it ! You also don't touch the commit ID and description - you just change the command before the commit ID from pick to "s" (squash)

Another thing is that you absolutely correctly mentioned that you didn't push yet. First and only one rule of git is "Do not rewrite published history". I.e. you don't rebase, reorder or delete commits that were already pushed for public access. This is true for all situation except when you're the only one who works on the project.

Upvotes: 11

Related Questions