Pregunta

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?

¿Fue útil?

Solución 2

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:

  • clone locally your repo,
  • remove the .git in that local clone,
  • git init. (ie, re-create a new local git repo from all the existing files),
  • add everything and do one commit,
  • add your remote (to your new remote repo),
  • and push that one commit of your new local repo.

Otros consejos

If you just want to keep your five commits for reference, maybe you should work in a branch with them.

  1. git branch new-branch master

  2. Do your commits. Since you have done this, just reset head of master:

    git reset --hard HEAD~5

  3. git merge --squash master new-branch

  4. git push

You will end up with squashed commit on master and origin/master and 5 commits on new-branch.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top