11. Adicionando tags a versões

Metas

  • Aprender como adicionar tags a commits para referenciamento futuro.

Acho que você concordará que trabalhar diretamente com hashes é simplesmente inconveniente. Não seria ótimo se você pudesse rotular commits específicos com nomes legíveis por humanos? Dessa forma, você poderia ver claramente os marcos importantes no histórico do projeto. Além disso, você poderia navegar facilmente para uma versão específica do projeto pelo seu nome. É para isso que servem as tags no Git.

Vamos chamar a versão atual do nosso página hello.hml de versão 1: v1.

01 Criando a tag do primeiro

Execute

git tag v1
git log

Resultado

$ git tag v1
$ git log
b7614c1 2023-11-28 | Added HTML header (HEAD -> main, tag: v1) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]

Agora, a versão atual da página é conhecida como v1.

02 Tags em versões antigas

Vamos marcar a versão anterior à versão atual com o nome v1-beta. Antes de tudo, vamos verificar a versão anterior. Em vez de procurar o hash, usaremos a notação ^, especificamente v1^, indicando o commit anterior a v1.

Se a notação v1^ lhe causar algum problema, você também pode tentar v1~1, que fará referência à mesma versão. A notação V~N significa "a N-ésima versão anterior a V" ou, no caso de v1~1, a primeira versão anterior a v1.

Execute

git checkout v1^
cat hello.html

Resultado

$ git checkout v1^
Note: switching to 'v1^'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 46afaff Added standard HTML page tags
$ cat hello.html
<html>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

Essa é a versão com as tags <html> e <body>, mas sem <head>. Vamos fazer dessa a versão v1-beta.

Execute

git tag v1-beta
git log

Resultado

$ git tag v1-beta
$ git log
46afaff 2023-11-28 | Added standard HTML page tags (HEAD, tag: v1-beta) [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]

03 Acessando através do nome da tag

Agora tente executar um checkout entre as duas versões com tags.

Execute

git checkout v1
git checkout v1-beta

Resultado

$ git checkout v1
Previous HEAD position was 46afaff Added standard HTML page tags
HEAD is now at b7614c1 Added HTML header
$ git checkout v1-beta
Previous HEAD position was b7614c1 Added HTML header
HEAD is now at 46afaff Added standard HTML page tags

04 Vendo tags com o comando tag

Você pode ver todas as tags usadas usando o comando git tag.

Execute

git tag

Resultado

$ git tag
v1
v1-beta

05 Vendo tags nos logs

Você também pode encontrar as tags no log.

Execute

git log main --all

Resultado

$ git log main --all
b7614c1 2023-11-28 | Added HTML header (tag: v1, main) [Alexander Shvets]
46afaff 2023-11-28 | Added standard HTML page tags (HEAD, tag: v1-beta) [Alexander Shvets]
78433de 2023-11-28 | Added h1 tag [Alexander Shvets]
5836970 2023-11-28 | Initial commit [Alexander Shvets]

Você pode ver as tags (v1 e v1-beta) listadas no log juntamente com o nome do branch (main). O HEAD mostra o commit em que você está atualmente (v1-beta).