# create branch from develop git pull git checkout -b feature/my-feature # work on branch and commit work. repeat until work is done git commit -am "implement my feature" git push # squash commits with an interactive rebase # first, choose all commits to squash into one git log --oneline # second, squash the last x commits # pick the one to squash into (usually the topmost), squash # the others # x can also be found with `git log --oneline main..HEAD | wc -l` (replace main with source branch) git rebase -i HEAD~x # forcepush these changes to the remote branch git push --force # refresh work done by others on develop in the meantime... git checkout develop git pull # change back to feature branch and rebase git checkout feature/my-feature git rebase develop # optional: resolve conflicts and then git add . git rebase --continue # since we rewrote history, force push changes to branch git push --force-with-lease # after that, branch can be merged into develop