В гите все устроено предельно просто. tag и даже branch это просто ссылка на комит, то есть на диске создается файл для tag/branch в котором указан хеш комита на который он ссылается. Отсюда вывод, чтобы создать тег нужен коммит.
Что казается pull/fetch, это почти одно - fetch простая команда которая получает изменения из удаленного репозитория, а pull - это составная команда, которая внутри первым шагом вызывает fetch, потом например rebase.
Ветки и метки можно полчить при клонировании репозитория, но для этого метка должна быть запушена в этот репозиторий.
По умолчанию, команда git push не отправляет метки на удалённые серверы. Необходимо явно отправить (push) метки на общий сервер после того, как вы их создали.
Подробнее
тут.