# Hotfixes

## Definição

**Hotfixes** são *branches* usados para resolver rapidamente as mudanças necessárias no branch principal (master). São destinados para a realização de alguma(s) correção(ões) crítica(s) encontrada(s) em produção.\
\
Por convenção elas têm o prefixo **hotfix/**.\
Por exemplo:

* hotfix/v1.0.1

&#x20;Importante ressaltar que as *hotfixes* são criadas **sempre** à partir da **branch&#x20;*****master***.

![](https://3697290398-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7iQOq9eJJ2zoW1Ls4P%2F-McpW-7oS_veDhxZWVK4%2F-McpaLezEGMG6RgwoEN6%2FHotfix-GitFlow.gif?alt=media\&token=56ca50ed-efc2-4e7d-b2a1-2167ab21501e)

{% hint style="info" %}
*Descrição da imagem:* Após houver uma versão em produção (master), é **criada uma hotfix** *(H - Nova hotfix),* onde há correções imediatas do código a partir do branch principal e por fim, **a mesclagem com o branch master** *(M - Merge)* e o código atualizado volta a ser integrado também, à **develop**.
{% endhint %}

## **Hotfixes na prática** :sunglasses:&#x20;

### Pré-requisitos

* Ter o GIT instalado
* Qualquer repositório com o [fluxo do Git Flow inicializado e configurado](https://developers-friends.gitbook.io/blog/git/git-flow-1/configuracao-inicial).

### 1. Criação de hotfixes

Para criar uma hotfix é bem simples:

> `git flow hotfix start <número-versão-proposta-de-correção>`

Com um comando neste padrão, **será criada um novo&#x20;*****branch*** **através da master** com o prefixo *hotfix/ ,* seguido do número de versão que você inserir.

Execute:

```
git flow hotfix start v1.0.1
```

O retorno do comando é um novo *branch* entitulado **hotfix/v1.0.1** e já é realizado *checkout* nesse novo *branch*.

*`[saída do console]`*                                                       \
`Switched to a new branch 'hotfix/v1.0.1'`\
\
`Summary of actions:`\
`- A new branch 'hotfix/v1.0.1' was created, bases on 'master'`            \
`- You are now on branch 'hotfix/v1.0.1'`\
\
`Follow-up actions:`\
`- Bump the version number now!`\
`- Start commtting last-minute in preparing your hotfix`\
`- When done, run:`\
\
&#x20;     `git flow hotfix finish 'v1.0.1'`&#x20;

### 2. Finalização de **hotfixes**

Após finalizar as **correções urgentes no código que está em produção**, o *branch* estará pronto para ser **finalizado** e **mesclado** tanto na *master* quanto na *develop*.

Então você verificou que **está na hotfix, não há nenhum commit a ser feito e nenhum arquivo pendente**...

```
git checkout hotfix/v1.0.1
git status
```

> *`[saída do console]`*                                \
> `No ramo hotfix/v1.0.1`                            \
> `nothing to commit, working tree clean`

#### Para **finalizar uma hotfix**, basta:

> `git flow hotfix finish <número-versão-proposta>`\
> \
> `O número da versão da hotfix é opcional quando você já está presente(checkout) nela.`

Execute:

```
git flow hotfix finish
```

Após esta instrução, **aparecerá a possibilidade de escrever uma mensagem** que descreverá a versão lançada (*nota de versão*).

*`[console]`*                                                       \
`#`\
`# Write a message for tag:`\
`#  v1.0.1`\
`# Lines starting with '#' will be ignored.`                     &#x20;

{% hint style="info" %}
A finalização de uma hotfix marca a **criação de uma** **tag** correspondente ao número de versão entitulado no branch hotfix.
{% endhint %}

Depois de escrever a mensagem, a hotfix **será meclada(merge) a master E a develop**, em seguida deletada *tanto localmente como remotamente*.

> Switched to branch 'master'\
> Your branch is up to date with 'origin/master'.\
> To \<url-repositorito-remoto>\
> &#x20;\-  \[deleted]                          hotfix/v1.0.1\
> Deleted branch hotfix/v1.0.1 (was 713d5ac).

> Summary of actions:
>
> * Hotfix branch 'hotfix/v1.0.1' has been merged into 'master'
> * The hotfix was tagged 'v1.0.1'
> * Hotfix branch 'hotfix/v1.0.1' has been locally deleted
> * You are now on branch 'develop'

## Considerações finais

{% hint style="success" %}
*Para garantir que o repositório remoto estará atualizado baseando no status da sua estação de trabalho local, execute os comandos abaixo:*

**EMPURRE (push) as atualizações de todos os branches**

> ```typescript
> git push --all
> ```

**SUBA (push) a tag recentemente criada**

> ```typescript
> git push --tags
> ```

{% endhint %}

{% hint style="info" %}
Nesta **seção sobre Git Flow** você encontrará explicações e usos práticos sobre **features, releases, tags e muito mais.**
{% endhint %}

Pronto, para trabalhar com hotfixes de forma simples e rápida, é isto!!

**Obrigado por chegar até aqui!** :grin:
