I've been using Git for a long time in a lite mode: branch, pull-commit-push, merge. Mostly with SourceTree. That was enough for development. So I'm an amateur)
But now I've got a repository that is watched by ArgoCD and which obtains pushes from different Gitlab pipelines. 99.9% of pushes go to their own folders. To tell you the truth I've never noticed a conflict. But as the number of pipelines grows we get more often:
error: failed to push some refs to '...'
Updates were rejected because the tip of your current branch is behind its remote counterpart. > Integrate the remote changes (e.g. 'git pull ...') before pushing again.
So the question is: why Git does not even try to merge the changes to remote branch throwing such error only if there are true conflicts? Because all you have to do is to pull changes and they never need any resolving and then repeat the push.
Git is almost 20 years old and is considered the most advanced VCS so I was surprised with such behaviour. Or maybe I've been searching not thoroughly enough and something is out there except brutal --force to deal with such situations?