Reputation: 2847
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?
Upvotes: 5
Views: 242
Reputation: 1323443
Slight variation from Titas's answer, without touching your master
branch, and squashing on a new branch (that you would push to your new repo)
git remote add newrepo url://of/your/new/repo
git checkout -b newbranch master
git merge --squash master
git push -u newrepo newbranch:master
But that would push the full history of master, +1 (squashed) commit, on your new repo.
If you wanted a branch new history, with your repo as after the 5 new commits, it is easier to:
.git
in that local clone, git init.
(ie, re-create a new local git repo from all the existing files), Upvotes: 1
Reputation: 1164
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
.
Upvotes: 5