The only difference is what you use them for, they are the same.
Branching is where you can develop work on a different version of the code on the main trunk.
The tag is used to "tag" the release. Say I only work on a chest. When I send V1 to a client, I create a "V1 tag" for it. Then I work on V2. When a client has a problem with V1, I can just check the tag and start debugging the problem in the same version as the client. You can check the tag, but you shouldn't . If you need to make a release of V1.1, you will create a branch with the same version as the V1 tag, and patch it and mark it when it is released as V1.1.
DaveShaw Aug 04 2018-11-11T00: 00Z
source share