> For the complete documentation index, see [llms.txt](https://developers-friends.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers-friends.gitbook.io/blog/git/git-flow-1/features.md).

# Features

## Definição

**Features** são *branches* para o desenvolvimento de uma funcionalidade específica, por convenção elas têm o prefixo **feature/**.\
Por exemplo:

* feature/cadastro-pessoa

&#x20;Importante ressaltar que as *features* (vamos nos acostumar a chamá-lás assim) são criadas **sempre** à partir do *branch* **develop**.

{% hint style="warning" %}
O conceito de feature é aplicado entendendo que **em cada uma** será realizado o desenvolvimento de **uma tarefa/história/demanda**, sendo assim ser possível organizar o fluxo de desenvolvimento por tarefas concluídas e terem suas criações e/ou alterações sempre presentes na develop (*branch* principal de desenvolvimento).
{% endhint %}

![](/files/-M8klDhdxF6qiBVmEkxS)

{% hint style="info" %}
*Descrição da imagem:* Criação de uma feature a partir da develop *(F - Nova feature)* e no final do desenvolvimento da funcionalidade *(C - Commit)* é realizada a mesclagem com a develop *(M - Merge)*.
{% endhint %}

## Features na prática :sunglasses:&#x20;

### Pré-requisitos

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

### 1. Criação de features

Para criar uma feature é bem simples:

> `git flow feature start <nome-funcionalidade-ou-tarefa>`

Com um comando neste padrão, **será criada um novo&#x20;*****branch*** **através da develop** com o prefixo *feature/ ,* seguido do nome que você inserir.

Execute:

```
git flow feature start cadastrar-pessoa
```

O retorno do comando é um novo *branch* entitulado **feature/cadastrar-pessoa** e já é realizado *checkout* nesse novo *branch*.

*`[saída do console]`*                                                       \
`Switched to a new branch 'feature/cadastrar-pessoa'`\
\
`Summary of actions:`\
`- A new branch 'feature/cadastrar-pessoa' was created, bases on 'develop'`\
`- You are now on branch 'feature/cadastrar-pessoa'`\
\
`Now, start committing on your feature. When done, use:`\
&#x20;   `git flow feature finish cadastrar-pessoa`

### 2. Finalização de features

Após terminar o desenvolvimento da funcionalidade, ser feito N commits, o *branch* estará pronto para ser finalizado e mesclado à develop.

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

```
git checkout feature/cadastrar-pessoa
git status
```

> *`[saída do console]`*                                \
> `No ramo feature/cadastrar-pessoa`                  \
> `nothing to commit, working tree clean`

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

> `git flow feature finish <nome-funcionalidade-ou-tarefa>`\
> \
> `O nome da feature é opcional quando você já está presente(checkout) nela.`

Execute:

```
git flow feature finish
```

Após esta instruçao, a feature **será meclada(merge) à develop** e, deletada *tanto localmente como remotamente*.

> Switched to branch 'develop'\
> Already up to date.\
> Deleted branch feature/cadastrar-pessoa (was 713d5ac).

> Summary of actions:
>
> * The feature branch 'feature/cadastrar-pessoa' was merged into 'develop'
> * Feature branch 'feature/cadastrar-pessoa' has been locally deleted
> * You are now on branch 'develop'

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

## Considerações finais

{% hint style="success" %}
*Resumo de comandos*

**Criar nova feature**

> ```typescript
> git flow feature start <nome-funcionalidade-ou-tarefa>
> ```

**Finalizar feature**

> ```typescript
> git flow feature finish
> ```

{% endhint %}

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

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

![O Autor](/files/-M7mSFYhAx839DBqUSiW)
