> 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/sua-vez/solucao-exercicio-4.md).

# Solução Exercício 4

### 👣 Passo a Passo

#### 1) Antes de fazer qualquer alteração, abra o terminal na pasta \`lista-de-leituras\` e verifique o estado do repositório através do comando:

```bash
git status
```

O resultado deve indicar que você está no branch `main` e que não há alterações pendentes:

```
On branch main
nothing to commit, working tree clean
```

#### &#x20;2) Em seguida, verifique o histórico de commits do repositório através do comando:

```bash
git log
```

Você verá algo como:

```bash
commit b3cdb1e1484e5a1214c82828d792f2f3decc1f9c (HEAD -> main)
Merge: 716c895 a5a2898
Author: Seu Nome <seu@email.com>
Date:   Mon Jul 21 16:30:33 2025 -0300

    Mescla branch dom-quixote

commit 716c895e7da1c29458c62efcce0017f751db69b5
Author: Seu Nome <seu@email.com>
Date:   Mon Jul 21 16:16:42 2025 -0300

    Adiciona O Senhor dos Anéis à lidos

commit a5a2898d43186dd434a2df53094944310eec2dd2 (dom-quixote)
Author: Seu Nome <seu@email.com>
Date:   Mon Jul 21 16:04:21 2025 -0300

    Adiciona Dom Quixote à lidos

commit c038697efedb924fcea1843db325e70aa17cd768 (o-mundo-de-sofia)
Author: Seu Nome <seu@email.com>
Date:   Thu Jul 17 08:31:50 2025 -0300

    Adiciona O Mundo de Sofia à lidos

commit d644703fa3831d41259488a4f36c70a7a3cb7bc0
Author: Seu Nome <seu@email.com>
Date:   Tue Jul 15 15:07:26 2025 -0300

    Adiciona título à lista de livros lidos

commit 313264487b7ef3db52bba883e1ddf108ee446284
Author: Seu Nome <seu@email.com>
Date:   Tue Jul 15 12:57:30 2025 -0300

    Adiciona arquivo lidos.txt
```

Use a tecla `↓` para rolar para baixo e `↑` para rolar para cima, caso o conteúdo não caiba todo na tela.

Aperte a tecla `q` para sair.

#### 3) No VS Code, edite o arquivo `lidos.txt` adicionando uma nova linha com um título de livro que não existe, por exemplo:

```
Meu Pequenino Livro de GitHubzim
```

O conteúdo do arquivo deve estar semelhante à:

```
Dom Casmurro
O Ateneu
O Mundo de Sofia
O Senhor dos Anéis
Dom Quixote
Meu Pequenino Livro de GitHubzim
```

#### 4) No VS Code, salve o arquivo (`Ctrl+S` ou `Cmd+S` no macOS)

#### 5) No terminal, verifique novamente o status e observe o que foi alterado:

```bash
git status
```

O resultado será algo como:

```bash
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   lidos.txt

no changes added to commit (use "git add" and/or "git commit -a")
```

#### 6) Observe as diferenças entre o arquivo salvo e o repositório

```bash
git diff
```

O resultado será algo como:

```bash
diff --git a/lidos.txt b/lidos.txt
index 6df90e4..7c96a48 100644
--- a/lidos.txt
+++ b/lidos.txt
@@ -3,3 +3,4 @@ O Ateneu
 O Mundo de Sofia
 O Senhor dos Anéis
 Dom Quixote
+Meu Pequenino Livro de GitHubzim
```

Aperte `q` para sair.

#### 7) Adicione o arquivo ao staging:

```bash
git add lidos.txt
```

#### 8) Verifique novamente o status do repositório:

```bash
git status
```

O resultado será algo como:

```bash
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   lidos.txt
```

#### 9) Observe agora as diferenças que estão no staging (o que será incluído no commit):

```bash
git diff --staged
```

O resultado será algo como:

```bash
diff --git a/lidos.txt b/lidos.txt
index 6df90e4..7c96a48 100644
--- a/lidos.txt
+++ b/lidos.txt
@@ -3,3 +3,4 @@ O Ateneu
 O Mundo de Sofia
 O Senhor dos Anéis
 Dom Quixote
+Meu Pequenino Livro de GitHubzim
```

Aperte `q` para sair.

#### 10) Use o comando `git restore --staged` para remover o arquivo do staging:

```bash
git restore --staged lidos.txt
```

Esse comando retira o arquivo do staging, mantendo as alterações no diretório de trabalho.

#### 11) Verifique novamente o status do repositório:

```bash
git status
```

O resultado será algo como:

```bash
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   lidos.txt

no changes added to commit (use "git add" and/or "git commit -a")
```

O arquivo aparecerá como modificado, mas não estará mais no staging.

#### 12) Use o comando `git restore` para desfazer as alterações feitas no arquivo:

```bash
git restore lidos.txt
```

Esse comando restaura o arquivo para o estado do último commit, descartando as alterações locais.

#### 13) Verifique novamente o status do repositório:

```bash
git status
```

O resultado será algo como:

```bash
On branch main
nothing to commit, working tree clean
```

Indicando que não há alterações pendentes.

#### 14) No VS Code, verifique o conteúdo do arquivo `lidos.txt`

Verifique que o título `Meu Pequenino Livro de GitHubzim` não está mais presente no arquivo.

O conteúdo do arquivo deve estar semelhante à:

```
Dom Casmurro
O Ateneu
O Mundo de Sofia
O Senhor dos Anéis
Dom Quixote
```

### 🧠 Análise

Neste exercício, você praticou os comandos `git restore --staged` e `git restore`, que permitem remover arquivos do staging sem perder as alterações no diretório de trabalho e também desfazer alterações locais no arquivo. Esses comandos são essenciais para controlar o que será incluído no próximo commit e para evitar que mudanças indesejadas sejam enviadas.

***

📚 Pronto, agora você sabe como usar `git restore` para descartar alterações locais e `git restore --staged` para remover arquivos do staging, ferramentas importantes para manter seu repositório organizado e seu fluxo de trabalho seguro.


---

# 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:

```
GET https://cumbucadev.gitbook.io/github-essentials/dia-4/sua-vez/solucao-exercicio-4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
