'How can I combine two commits into one commit?
I have a branch 'firstproject' with 2 commits. I want to get rid of these commits and make them appear as a single commit.
The command git merge --squash sounds promising, but when I run git merge --squash my terminal just brings up options for the command. What is the correct command?
Commit 1:
Added 'homepage.html'
Added 'contacts.html'
Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'
Solution 1:[1]
Lazy simple version for forgetfuls like me:
git rebase -i HEAD~3
or however many commits instead of 3.
Turn this
pick YourCommitMessageWhatever
pick YouGetThePoint
pick IdkManItsACommitMessage
into this
pick YourCommitMessageWhatever
s YouGetThePoint
s IdkManItsACommitMessage
and do some action where you hit esc then enter to save the changes. [1]
When the next screen comes up, get rid of those garbage # lines [2] and create a new commit message or something, and do the same escape enter action. [1]
Wowee, you have fewer commits. Or you just broke everything.
[1] - or whatever works with your git configuration. This is just a sequence that's efficient given my setup.
[2] - you'll see some stuff like # this is your n'th commit a few times, with your original commits right below these message. You want to remove these lines, and create a commit message to reflect the intentions of the n commits that you're combining into 1.
Solution 2:[2]
- Checkout your branch and count quantity of all your commits.
- Open git bash and write:
git rebase -i HEAD~<quantity of your commits>(i.e.git rebase -i HEAD~5) - In opened
txtfile changepickkeyword tosquashfor all commits, except first commit (which is on the top). For top one change it toreword(which means you will provide a new comment for this commit in the next step) and click SAVE! If in vim, pressescthen save by enteringwq!and press enter. - Provide Comment.
- Open Git and make "Fetch all" to see new changes.
Done
Solution 3:[3]
This is what I do. It's easier(for me) than doing an interactive rebase:
git reset HEAD~2. // go back 2 commits.
git commit -am “My squashed single commit”
git push --force
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | ks1322 |
| Solution 2 | JGallardo |
| Solution 3 | RayLoveless |
