> For the complete documentation index, see [llms.txt](https://cumbucadev.gitbook.io/github-essentials/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cumbucadev.gitbook.io/github-essentials/dia-4/desfazendo-alteracoes-localmente/desfazendo-alteracoes-antes-do-commit.md).

# Desfazendo Alterações Antes do Commit

Durante o desenvolvimento, é comum modificar arquivos e depois perceber que deseja desfazer essas mudanças antes de realizar um commit. O Git oferece diferentes maneiras de lidar com essa situação, dependendo do estado dos arquivos. Vamos aqui focar em dois possíveis cenários:

* Desfazer alterações que ainda não foram adicionados à área de staging
* Remover arquivos da área de staging

## Desfazer Alterações Não Adicionadas à Área de Staging

Se um arquivo foi editado, mas ainda não foi adicionado ao staging com <mark style="color:orange;">git</mark> <mark style="color:purple;">add</mark>, você pode simplesmente descartar as alterações com:

> <mark style="color:purple;">git</mark> <mark style="color:orange;">restore</mark> <mark style="color:green;">nome-do-arquivo</mark>

Isso reverterá o arquivo para o último estado salvo no repositório.

## Remover Arquivos da Área de Staging

Se você já adicionou o arquivo ao staging com <mark style="color:orange;">git</mark> <mark style="color:purple;">add</mark>, mas deseja remover as mudanças antes do commit, use:

> <mark style="color:purple;">git</mark> <mark style="color:orange;">reset</mark> <mark style="color:blue;">--staged</mark> <mark style="color:green;">nome-do-arquivo</mark>

Isso removerá o arquivo do staging, mas manterá as mudanças no diretório de trabalho.  O comando apenas "desfaz o git add".

***

{% hint style="info" %}
**Uma nota sobre o git checkout**

Se você já tem alguma experiência com o Git, pode estar se perguntando sobre o comando <mark style="color:purple;">git</mark> <mark style="color:orange;">checkout</mark>, que também é utilizado para desfazer mudanças em arquivos. Historicamente, o <mark style="color:purple;">git</mark> <mark style="color:orange;">checkout</mark> desempenhou um papel central no fluxo de trabalho do Git, não só permitindo a restauração de arquivos, mas também sendo usado para troca de branches e até mesmo criação de novos branches.

Com o tempo, à medida que o Git evoluía e novas funcionalidades eram adicionadas, o <mark style="color:purple;">git</mark> <mark style="color:orange;">checkout</mark> passou a acumular muitas responsabilidades. Essa sobrecarga de funções gerou certa confusão, especialmente para iniciantes, pois o mesmo comando era usado para realizar operações bem diferentes, como alternar entre branches e restaurar arquivos de versões anteriores.

Para resolver essa confusão, os comandos <mark style="color:purple;">git</mark> <mark style="color:orange;">switch</mark> e <mark style="color:purple;">git</mark> <mark style="color:orange;">restore</mark> foram introduzidos na versão 2.23 do Git, lançada em agosto de 2019. O objetivo principal foi separar as responsabilidades: o <mark style="color:purple;">git</mark> <mark style="color:orange;">switch</mark> foi criado para simplificar a troca de branches, enquanto a restauração de arquivos foi transferida para o comando <mark style="color:purple;">git</mark> <mark style="color:orange;">restore</mark>. Dessa forma, o <mark style="color:purple;">git</mark> <mark style="color:orange;">restore</mark> foca exclusivamente na restauração de arquivos, oferecendo uma experiência mais intuitiva e menos propensa a erros, especialmente para novas pessoas usuárias.

Se você ainda estiver usando o <mark style="color:purple;">git</mark> <mark style="color:orange;">checkout</mark> para restauração de arquivos, o <mark style="color:purple;">git</mark> <mark style="color:orange;">restore</mark> é a opção mais moderna e recomendada para essa tarefa.
{% endhint %}

{% hint style="warning" %}
Esta é uma explicação simplificada para fins didáticos. Para explorar todas as possibilidades do comando <mark style="color:purple;">`git`</mark><mark style="color:orange;">`restore`</mark>  consulte a documentação oficial:

* [documentação oficial git restore](https://git-scm.com/docs/git-restore/pt_BR)
  {% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://cumbucadev.gitbook.io/github-essentials/dia-4/desfazendo-alteracoes-localmente/desfazendo-alteracoes-antes-do-commit.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
