tags
are your friend, but manually maintaining them is painful. Since Git or any SCM tool would ideally be tracking your source code and not the deployable artifact, we will need some sort of external help to inject this. The good way is to use a build tool or a build server (details below), but as with almost anything with git, there is a hack (see this answer)
Releasing
Look for any "release" plugins so that they can maintain it for you, in my current project we are using the Axion Release Plugin for maintaining the versions.
Displaying the version
In our webapp we display the "version" in footer and also the git commit hash which is hidden in the page. These can be easily injected into manifest or properties file by a build server like Bamboo or Jenkins, or even with build tools Maven or Gradle.