> 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-2.md).

# Solução Exercício 2

### 👣 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 será algo como:

```bash
On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)
```

#### 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 d644703fa3831d41259488a4f36c70a7a3cb7bc0 (HEAD -> main)
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
```

Aperte a tecla `q` para sair.

#### 3) Crie e altere para um novo branch com o nome de um livro que você já leu, por exemplo:

```bash
git switch -c o-mundo-de-sofia
```

O resultado será algo como:

```bash
Switched to a new branch 'o-mundo-de-sofia'
```

#### 4) Certifique-se que o novo branch foi criado e que você já alternou para ele:

```bash
git branch
```

O resultado deverá ser:

```bash
  main
* o-mundo-de-sofia
```

&#x20;Aperte a tecla `q` para sair.

#### 5) No VS Code, edite o arquivo `lidos.txt` adicionando uma nova linha com o título do livro já lido escolhido, por exemplo:

```
O Mundo de Sofia
```

O conteúdo do arquivo deve estar semelhante à:

```
Dom Casmurro
O Ateneu
O Mundo de Sofia
```

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

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

```bash
git status
```

O resultado será algo como:

```bash
On branch o-mundo-de-sofia
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")
```

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

```bash
git diff
```

O resultado deve mostrar a linha "O Mundo de Sofia" em verde adicionada, logo abaixo de "O Ateneu".&#x20;

Aperte `q` para sair.

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

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

#### 10) 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
```

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

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

O resultado deve mostrar a linha "O Mundo de Sofia" em verde adicionada, logo abaixo de "O Ateneu".

Aperte a tecla `q` para sair.

#### 12) Faça o commit com a mensagem:

```bash
git commit -m "Adiciona O Mundo de Sofia à lidos"
```

O resultado será algo como:

```bash
[o-mundo-de-sofia d16cdfa] Adiciona O Mundo de Sofia à lidos
 1 file changed, 1 insertion(+)
```

#### 13) Verifique novamente o histórico do repositório:

```bash
git log
```

Você verá algo como:

```bash
commit c038697efedb924fcea1843db325e70aa17cd768 (HEAD -> 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 (main)
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
```

Aperte a tecla `q` para sair.

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

```bash
git status
```

O status deve indicar que não há alterações pendentes:

```bash
On branch o-mundo-de-sofia
nothing to commit, working tree clean
```

#### 15) Volte para o branch principal `main`:

```bash
git switch main
```

O terminal mostrará:

```bash
Switched to branch 'main'
```

#### 16) No terminal, verifique novamente o status:

```bash
git status
```

O resultado será algo como:

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

#### 17) Antes de fazer o merge, verifique o log da branch `main`:

```bash
git log
```

O commit feito no outro branch **ainda não aparece aqui**, já que a `main` ainda não recebeu o merge. O histórico será algo como:

```bash
commit d644703fa3831d41259488a4f36c70a7a3cb7bc0 (HEAD -> main)
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
```

Aperte a tecla `q` para sair.

#### 18) Faça o merge do branch `adiciona-mundo-de-sofia` no `main`

```bash
git merge --no-edit o-mundo-de-sofia
```

O resultado será algo como:

```bash
Updating d644703..c038697
Fast-forward
 lidos.txt | 1 +
 1 file changed, 1 insertion(+)
```

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

Confirme que o novo livro foi adicionado corretamente ao final do arquivo.

```
Dom Casmurro
O Ateneu
O Mundo de Sofia
```

#### 20) No terminal, verifique o estado do repositório através do comando:

```bash
git status
```

O resultado será algo como:

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

#### 21) Observe novamente o log do branch `main`

```bash
git log
```

Você verá algo como:

```bash
commit c038697efedb924fcea1843db325e70aa17cd768 (HEAD -> main, 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
```

Aperte a tecla `q` para sair.

***

### 🧠 Análise

Agora que concluímos o passo a passo, é hora de entender com mais clareza **como o Git registrou cada ação internamente** e **o que de fato aconteceu no momento do merge**. Para isso, vamos comparar os logs antes e depois da operação.

#### 📌 Antes do merge (passo 16):

O comando `git log` no `main` mostra apenas dois commits:

```bash
commit d644703... (HEAD -> main)
    Adiciona título à lista de livros lidos

commit 3132644...
    Adiciona arquivo lidos.txt
```

Neste ponto, o commit feito no **branch `o-mundo-de-sofia`** **ainda não aparece** no `main`, porque as alterações foram feitas e salvas apenas naquele outro branch.

#### 📌 Após o merge (passo 20):

Após o comando:

```bash
git merge --no-edit o-mundo-de-sofia
```

o Git mostra que o merge foi do tipo:

```
Fast-forward
```

E agora o log da `main` mostra **três commits**, sendo o mais recente **aquele criado no outro branch**:

```bash
commit c038697e... (HEAD -> main, o-mundo-de-sofia)
    Adiciona O Mundo de Sofia à lidos
```

#### O que o Git fez nesse merge?

O Git **simplesmente avançou o ponteiro** da `main` até o commit que já estava no branch `o-mundo-de-sofia`. Isso é o que chamamos de um **merge do tipo&#x20;*****fast-forward***.

#### 🔄 Merge Fast-forward

* Esse tipo de merge **não cria um novo commit de merge**.
* O Git apenas **atualiza o ponteiro da branch atual (`main`)** para apontar para o mesmo commit do outro branch.
* Isso **só é possível** quando a `main` não tem nenhum commit novo em relação ao branch que está sendo mesclado.

#### 🧭 Visualmente, antes do merge:

```
main ---> C2
            \
             C3 (o-mundo-de-sofia)
```

Após o merge fast-forward:

```
main ---> C2 ---> C3
                   ↑
             o-mundo-de-sofia
```

A `main` passa a apontar para o mesmo commit do outro branch (`o-mundo-de-sofia`), e o histórico permanece linear.

#### 📜 Resumo do log após o merge

* Agora o commit `"Adiciona O Mundo de Sofia à lidos"` aparece na `main`.
* O histórico de commits está linear, pois o Git **não precisou resolver conflitos nem combinar múltiplas linhas de desenvolvimento**.
* O `main` e o `o-mundo-de-sofia` estão apontando para o mesmo commit.

***

:books: Muito bem! Você criou uma nova branch, fez alterações isoladas nela, registrou essas mudanças com um commit e depois mesclou tudo de volta à branch principal com um merge do tipo *fast-forward*.


---

# 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-2.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.
