With a repository server that supports merge requests and feedback from CI/CD tooling on commits/push you can motivate people to use merges rather cleanly.
If you add to that very simple rules like
- create branches for every feature
- commit often
- push often
- merge only via merge/pull requests
then even people new to Git can handle it just fine.
Merge conflicts happen when multiple people work on the same file and try to merge their different status. Imho, code bases where multiple people work on the same file at the same time have a more fundamental problem than Git.
Honestly, I still struggle to see the value in rebasing. Maybe because I haven't used it extensively. Superficially, to me at least, it does the same as a "git push -f".
I am curious to hear why it is supposed to be superior, especially with modern CI tools like Github and the likes.