It was engraved into my mind the importance of doing a rebase. Having all commits compiled together into a singular one sounds amazing, and clean when sending out a pr.
Rebasing didn't sound bad, the steps were actually quite simple
- Push a commit everytime you completed a section of your overall task
- Once all is done, do a rebase interactive to main from your working branch and squash all of them together
- Checkout to your working branch and push it
The Problem
The problem occurs when someone reviews the code, and I wanted to pass my newly added code. The rebase interactive doesn't seem to contain anymore values. That's a problem, because if I'm going to be pushing my updated code, I will now have two commit as to one. It doesn't sound like that big of a deal, but if you have to push a code every time someone does a review, you'll end up with several to up to a dozen commits on your pull request like this pr did.
How to solve the issue
The steps I told at the start was not all wrong, but if you noticed one thing, I actually never do a pull upstream. What do you think would happen if I pass a code that is behind the main branch? I would have conflicts. If I simply keep on doing what I did with rebase, I will consistently have conflicts. Now you're asking, what are the actual steps onto doing a proper rebase? the same steps apply
- Push a commit every time you completed a section of your overall task
- Once all is done, do a rebase interactive to main from your working branch and squash all of them together
git rebase main -i
Now you add extra steps...
- Do a checkout to the main branch
git checkout main - Update your main branch to its latest instance through
git pull upstream main - Checkout back to your working branch
Now instead of pushing it, you do another rebase but there's no need for interactive, because you only have a single commit
- Remember to do a force push, because you are trying to alter a previous branch history
git push -f origin main
Always make sure that before you do anything, that your main branch is always clean. If you are not sure simply do a git checkout -B main upstream/main, this should reset your main to the latest commit from the original repo.
Remember that
upstreamis only for fork repo, you should be usingoriginfrom your own
Top comments (0)