I have a local git repo, one remote repo. I made 5 commits to local repo since last pull from remote.
Now I need to push to remote. And I need to squash my last 5 commits.
I can do it by git rebase -i HEAD~5
But it's not good. I don't want to change anything in my local repo. I want to push one squashed commit to remote and leave 5 unchanged commits in my local repo.
Any ideas?
UPD: what about if I have my local repo with 5 commits. and I need to create new remote repo to share my code with others. How to squash commits for this new repo?
As a general rule, when merging a pull request from a feature branch with a messy commit history, you should squash your commits. There are exceptions, but in most cases, squashing results in a cleaner Git history that's easier for the team to read.
When you select the Squash and merge option on a pull request on GitHub.com, the pull request's commits are squashed into a single commit. Instead of seeing all of a contributor's individual commits from a topic branch, the commits are combined into one commit and merged into the default branch.
Squashing is a way to rewrite your commit history; this action helps to clean up and simplify your commit history before sharing your work with team members. Squashing a commit in Git means that you are taking the changes from one commit and adding them to the Parent Commit.
If you just want to keep your five commits for reference, maybe you should work in a branch with them.
git branch new-branch master
Do your commits. Since you have done this, just reset head of master:
git reset --hard HEAD~5
git merge --squash master new-branch
git push
You will end up with squashed commit on master
and origin/master
and 5 commits on new-branch
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With