What branching strategies are best practice?

I've worked as a Devops Engineer for a small company for three years and for the most part it's always been just me working on projects. I tend to have a main branch which is what is deployed to production. I also have a branch called 'uat-testing'. Which in our CiCd just points to a different Kubernetes cluster with Argocd apps. Whenever I do development, I tend to do this in a feature branch, or a development branch.

When I'm ready to deploy to UAT, I just checkout to uat and merge the chains in, push and Argo deploys. Our QA team tests, then when happy, I checkout to main, merge, push, and Argo deploys.

I've just moved jobs, and I've been told that my git branch strategy is horrendous. And I should be using tags. This is all new to me, so I'm looking for resources and advice. What is the best practice for git branching strategies? Is it completely dependent on your application, what you are deploying? The example above was for deploying manifests into K8s