3 Estados dos arquivos — Git e Github
Tags: git, github, programming, braziliandevs
Published: 2022-01-06 13:04:28

Chegou a hora de entendermos sobre os **três estados** dos arquivos dentro de um projeto, e como somos capazes de alterar o estado deles e até visualizar as **modificações atuais** comparado com o commit anterior.

![Lifecycle dos arquivos](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l71mnta18v8fecoldcd2.png)

## 1. Working directory (modified)
É o estado em que todo arquivo que foi **adicionado, modificado ou removido**, resulta em arquivo modificado, já que está diferente do estado atual, porém ele ainda não está dentro do próximo commit. Ou seja, o projeto está diferente comparado com a ultima versão.

## 2. Staging area (staged)
O arquivo só fica **‘preparado’** após executarmos o comando `git add` , resumindo o git já reconhece o arquivo que foi modificado e agora ele está na área de preparação e estará dentro do próximo commit.

## 3. Commit area (commited)
Agora que já temos todos os arquivos modificados e adicionados no Staged area, podemos formar um commit, com o seguinte comando `git commit "Nome commit"` , é importante lembrar que se existirem arquivos fora do Staged, ainda como **modified** ele não será adicionado no commit atual. Podemos formar um commit de diferentes maneiras, uma nova feature ou uma correção, depende da ocasião.
Podemos enviar para o Github com o comando `git push` e recomeça todo o ciclo novamente.

---

## Restaurando arquivos
Já conhecemos o fluxo dos arquivos dentro do Git, podemos criar um cenário hipotético onde você ficou encarregado de realizar algumas modificações no projeto, você fez todas as alterações e adicionou os arquivos ao `staged area` com o `git add .` porém um arquivo foi de intruso e precisa ser adicionado em um outro commit, precisamos tirar ele usando o comando:

`$ git restore --staged File.html`

Esse comando irá **retirar o arquivo** ‘File.html’ do staged, ou seja, ele vai voltar para o inicio do processo e vai estar apenas como modified.

`$ git restore --staged *.css`

Remove todos os arquivos na staged que terminem com `.css`.

`$ git restore .`

Remove todos os arquivos.


![Output do comando git restore](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1xiz9vz1jr17gdskz069.png)

Podemos também restaurar um ponto histórico exato usando o `git restore --source` porém é um conceito um pouco mais avançado.

---

## Visualizando diferenças
Sabemos adicionar e remover os arquivos entre os estados, existe um comando bem interessante na hora que você está desenvolvendo algo e precisa **visualizar** as modificações que você realizou.

`$ git diff`

Ele permite ver as alterações que foram realizadas:


![Output do comando git diff](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lz9h8hrr3cagwqdnfy51.png)

---

Nesse post apresentei alguns conceitos ainda iniciante porem **fundamental** para um bom desenvolvimento, são comando usado no **dia a dia de um projeto**. Importante você conhecer os três estados para saber quais arquivos vão para o próximo commit, ou quais arquivos precisam ser adicionados/removidos, também vimos uma forma de **visualizar as alterações** que foram realizadas sendo comparadas com as do commit anterior.

Fontes:
https://git-scm.com/book/pt-br/v2/Fundamentos-de-Git-Gravando-Altera%C3%A7%C3%B5es-em-Seu-Reposit%C3%B3rio