Supporting releases: It's very important to know exact version used by customer. In order to reproduce the error you have to switch to codebase used for reported release and analyse the problem.
If you have fixed release cycles it's pretty easy to embed version number on "About" page and get that information with bug report from customer. wait, but what about "continuos delivery" practices (there may be many different software versions pulled between official releases)? And what about human mistakes (one can forget to release software without version updated)?
The answer is: automation. You have to embed branch/commit ID somewhere in application (to be visible for end user). Then you can point exact software version that was installed on this particular machine.
You can find below how we retrieve branch name / commit ID with GIT/C++ environment (our Makefile fragment):
git branch -v | sed 's/no branch/no_branch/' \
| awk '/^\*/ { print "#define APP_VERSION \"" $$2 " " $$3 "\"" }' \
> headers/version.h
version.h file is regenerated automatically on every build (and is not stored under GIT), so it will be always filled properly. Based on this automatically generated files you can show version information in UI or insert it into logs (it depends on your application type).