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

# Solução Exercício 3

### 👣 Passo a Passo

#### 1) Verifique o estado inicial do repositório

Antes de fazer qualquer alteração, abra o terminal na pasta `lista-de-leituras` e verifique o estado do repositório:

```bash
git status
```

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

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

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

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

```bash
git switch -c dom-quixote
```

O resultado será algo como:

```bash
Switched to a new branch 'dom-quixote'
```

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

```bash
git branch
```

O resultado deverá ser:

```bash
* dom-quixote
  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:

```
Dom Quixote
```

#### 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 dom-quixote
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 "Dom Quixote" em verde adicionada, logo abaixo de "O Mundo de Sofia".&#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 "Dom Quixote" em verde adicionada, logo abaixo de "O Mundo de Sofia".&#x20;

Aperte a tecla `q` para sair.

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

```bash
git commit -m "Adiciona Dom Quixote à lidos"
```

O resultado será algo como:

```bash
[dom-quixote a5a2898] Adiciona Dom Quixote à lidos
 1 file changed, 1 insertion(+)
```

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

```bash
git log
```

Você verá algo como:

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

    Adiciona Dom Quixote à lidos

commit c038697efedb924fcea1843db325e70aa17cd768 (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
```

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.

#### 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 dom-quixote
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) 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 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

```

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.

#### 18) No VS Code, edite novamente lidos.txt, adicionando **outra linha no final** com outro livro, por exemplo:

```
O Senhor dos Anéis
```

O conteúdo do arquivo deve estar semelhante à:

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

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

#### 20) 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")
```

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

```bash
git diff
```

O resultado deve mostrar a linha "O Senhor dos Anéis" em verde adicionada, logo abaixo de "O Mundo de Sofia".&#x20;

Aperte `q` para sair.

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

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

#### 23) 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 Senhor dos Anéis" em verde adicionada, logo abaixo de "O Mundo de Sofia".&#x20;

Aperte a tecla `q` para sair.

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

```bash
git commit -m "Adiciona O Senhor dos Anéis à lidos"
```

O resultado será algo como:

```bash
[main 716c895] Adiciona O Senhor dos Anéis à lidos
 1 file changed, 1 insertion(+)
```

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

```bash
git log
```

Você verá algo como:

```bash
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 c038697efedb924fcea1843db325e70aa17cd768
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.

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

```bash
git status
```

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

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

#### 27) Tente executar o merge:

```bash
git merge --no-edit dom-quixote
```

O Git detectará um conflito, pois as duas alterações foram feitas na mesma região do arquivo. Você verá uma mensagem como:

```bash
Auto-merging lidos.txt
CONFLICT (content): Merge conflict in lidos.txt
Automatic merge failed; fix conflicts and then commit the result.
```

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

```bash
git status
```

O resultado será algo como:

```bash
On branch main
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   lidos.txt

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

#### 29) No VS Code, visualize o conflito. Abra o arquivo `lidos.txt`. Você verá algo como:

```txt
Dom Casmurro
O Ateneu
O Mundo de Sofia
<<<<<<< HEAD
O Senhor dos Anéis
=======
Dom Quixote
>>>>>>> dom-quixote
```

#### 30) No VS Code, edite o arquivo para resolver o conflito, mantendo as duas linhas se desejar:

```
O Senhor dos Anéis
Dom Quixote
```

O conteúdo do arquivo deve estar semelhante à:

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

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

#### 32) No terminal, observe as diferenças entre o arquivo salvo e o repositório

```bash
git diff
```

O resultado deve mostrar algo como:

```
diff --cc lidos.txt
index ec6cec5,76be986..0000000
--- a/lidos.txt
+++ b/lidos.txt
@@@ -1,4 -1,4 +1,5 @@@
  Dom Casmurro
  O Ateneu
  O Mundo de Sofia
 +O Senhor dos Anéis
+ Dom Quixote
```

Aperte `q` para sair.

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

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

#### 34) 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 algo como:

```
diff --git a/lidos.txt b/lidos.txt
index ec6cec5..6df90e4 100644
--- a/lidos.txt
+++ b/lidos.txt
@@ -2,3 +2,4 @@ Dom Casmurro
 O Ateneu
 O Mundo de Sofia
 O Senhor dos Anéis
+Dom Quixote
```

Aperte `q` para sair.

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

```bash
git commit -m "Mescla branch dom-quixote"
```

O resultado será algo como:

```bash
[main b3cdb1e] Mescla branch dom-quixote
```

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

Confirme que os dois novos títulos foram adicionado corretamente ao final do arquivo.

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

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

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

```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.

***

### 🧠 Análise

#### O que aconteceu neste merge?

Durante este merge, o Git não conseguiu combinar automaticamente as alterações feitas porque ambas impactaram a mesma região do arquivo. Isso resultou em um **conflito de merge**.

Diferente de um merge simples (fast-forward), onde o Git apenas avança o ponteiro da branch, no merge com conflito o sistema precisa de uma intervenção manual para decidir quais mudanças devem ser mantidas.

O Git marca o conflito diretamente no arquivo, usando os delimitadores:

* `<<<<<<< HEAD` — indica o começo da versão atual (branch base)
* `=======` — separa as versões conflitantes
* `>>>>>>> nome-do-branch` — indica a versão que está sendo mesclada

Para resolver o conflito, você deve editar o arquivo, definindo o conteúdo final desejado, salvar, adicionar ao staging (`git add`) e finalizar com um commit.

#### Visualmente

Antes do merge:

```
main         ------ C1 ------ C3 ("O Senhor dos Anéis")
                     \
dom-quixote           -- C2 ("Dom Quixote")
```

Após o merge com conflito resolvido:

```
main         ------ C1 ------ C3 --------- C4 (merge commit)
                     \                     /
dom-quixote           -- C2 ---------------
```

O commit `C4` representa a junção das duas linhas de desenvolvimento.

#### Resumo

* Um **merge com conflito** ocorre quando duas alterações diferentes são feitas na mesma parte de um arquivo, e o Git não consegue unificar automaticamente as mudanças.
* É necessário resolver manualmente o conflito, escolhendo o conteúdo final desejado, adicionar ao staging e concluir o merge com um commit.
* Embora o histórico do Git registre múltiplas linhas de desenvolvimento, após a realização do merge o histórico da branch principal (`main`) aparenta ser **linear**, pois o commit de merge integra todas as alterações em uma única linha de desenvolvimento.

***

📚 Pronto! Agora você já criou branches, fez commits, resolveu conflitos e mesclou as alterações no branch principal `main`. Seu repositório está atualizado com todos os livros adicionados, e você domina o fluxo básico de colaboração usando Git!


---

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