I finally understand why some people are so against rebase. They're doing it wrong.
I've always heard people talk about how it doesn't scale, but I use rebase like 99% of the time, and have worked on projects with hundreds of ICs. This is the first time I've seen someone explain it in a way where I get it. NO I'M NOT FORCE PUSHING TO MAIN YOU SILLY NILLY! Turns out I'm "squash rebasing." I guess I didn't know I need to specify that.
I do it slightly differently tough. I use git commit --amend to build up a single commit as I go.
git checkout -b blah-feature
# do some work
git commit -m "Main description of my feature"
# do more work
# no -m, and then I just add bullet points for each subsequent change in vim (example below)
git commit --amend
Then, once I'm ready to make a PR I do the following:
# pulls from remote without merging
git fetch origin main
# adds my single commit to the end of the current main
git rebase main
# push up feature branch for code review
git push
# get yelled at about --set-upstream, and copy/paste that command :-)
My commit messages typically look like:
Add some new feature
- do some sub task
- do another sub task
- ...