GitHub is the most mainstream, Gitlab has the most features and is selfhostable, Gitea has fewer features, but is more lightweight for selfhosting. Both Gitlab and Gitea are also working on federation.
I don’t know about the others.
I personally use codeberg but I have to use github to send PR to some project.
As a regular user who doesn’t do any dev work but likes to keep tabs on various projects, Gitlab all the way. It has an interface to track issues specific to a given version, giving you an easy way to gauge progress on upcoming releases and see what the holdups are. I’ve not found any kind of analog for that on GitHub unfortunately, but maybe I just haven’t looked in the right place
Github has the most visibility, codeberg has the best community features for stripping away some of Microsoft’s hegemony over open source, and gitlab is flat and simple the nicest one to use
It’s a matter of opinion and lots of it depends on your preferences.
Github: Where most developers are and therefore has the best network effect. Easy for new contributors. Gitlab: Got some traction after Microsoft bought Github, but is very similar, just not as popular. Codeberg: Completely open source (I believe) it’s the option with most respect for your privacy. Lacks the network effect until fediverse integration is complete, which I do believe the platform is working on. Cgit: A very simple git repository viewer. You can’t do anything from it, except see the repository. Some big projects use this, like the kernel.
There are more options, but some gets very specific after this.