na aula só foi colocado git log -n 2, isso já indica pra tag -a, que será nessas 2 ultimas commits o adicionamento da release? não precisa colocar o head em cima da commit para nomear que iniciando dela que vai ser a versão posta?
na aula só foi colocado git log -n 2, isso já indica pra tag -a, que será nessas 2 ultimas commits o adicionamento da release? não precisa colocar o head em cima da commit para nomear que iniciando dela que vai ser a versão posta?
Oi, Francisco! Tudo bem?
Quando executamos o comando git log -n 2
, é apresentado uma parte do nosso histórico de commits, o qual se restringe apenas a mostrar a quantidade de commits determinada no comando (nesse caso, dois). Contudo, esse procedimento não afirma ao Git quais commits desejamos adicionar à tag.
A existência do HEAD na criação de uma tag é necessário, tendo em vista que, a partir disso, são selecionados os commits que irão compor a versão. Com o comando git tag
, o ponteiro do HEAD já está, de maneira implícita, apontando para o commit mais recente, o que significa dizer que nós não precisamos realizar tal procedimento.
Caso não quiséssemos criar a tag a partir do último commit e sim a partir de outro, seria preciso redirecionar o HEAD, migrando o ponteiro para o commit desejado.
Para fazer isso, precisamos conhecer o hash do commit que receberá o ponteiro do HEAD. No Git, o hash é um valor que referencia cada commit feito, para visualizá-lo e copiá-lo, podemos executar o comando abaixo:
git log --oneline
A partir dele, veremos todo o histórico dos nossos commits de uma forma mais reduzida e de fácil visualização. Observe a partir de qual commit você deseja criar a tag e copie seu hash, localizado na lateral esquerda de cada linha.
Veja um exemplo abaixo:
Observe que, na imagem, HEAD está apontando para o último commit, com a mensagem “terceiro commit”. Contudo, queremos criar a tag a partir de “segundo commit”, que está logo abaixo. Logo, precisamos selecionar e copiar seu hash d25c285
e digitar o seguinte comando:
git checkout d25c285
O comando checkout
nos possibilita "navegar" por diferentes lugares dentro do nosso próprio repositório. Portanto, desse modo “voltamos no tempo” e o HEAD agora está apontando para o segundo commit, observe:
Feito isso, já podemos criar a tag a partir do comando abaixo:
git tag -a v0.1.0 -m "Mensagem descritiva sobre a tag"
Ao criar uma tag, é interessante adicionar a flag -a
, a qual determina que essa tag será do tipo "annotated" (anotada) e, portanto, levará consigo algumas informações acerca da ação feita, como nome, e-mail, arquivos modificados, etc. Um outro ponto sobre o comando acima é o uso da flag -m
. Por meio dela, podemos adicionar uma mensagem descritiva sobre a criação da nova tag!
Para finalizar, podemos retornar ao estado mais recente da nossa aplicação, assim:
git checkout master
Se executarmos novamente git log --oneline
, veremos que a tag já foi criada:
Caso queira enviá-la para o repositório do projeto no Github, será necessário fazer um push
, como mostro abaixo:
git push origin v0.1.0
Observação: note que, após o origin
foi escrito o nome dado à tag. Isso é importante para que ela seja enviada ao repositório com êxito. Caso não se lembre do nome, existe um comando que nos apresenta todas as tags já feitas — com ele, podemos consultá-lo. A seguir, o comando:
git tag
A partir da explicação acima, percebemos que, caso deseja-se criar uma tag a partir das últimas modificações feitas, não precisamos lidar com o HEAD, visto que, implicitamente, ele já está presente na criação da tag. Por outro lado, se quiséssemos limitar os commits da tag, realocar o HEAD, o uso do git checkout
, seria necessário.
Francisco, espero ter ajudado! Caso surjam dúvidas após minha explicação ou ao decorrer dos seus estudos, fico à disposição para ajudá-lo. Forte abraço e até mais!
Muito obrigado Andrieli, me ajudou bastante a resolver um problema semelhante!
A sua explicação foi bem completa Andrieli, muito obrigado!