Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add git revert command #27

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions 3-comandos/cherry-pick.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,4 @@ O comando `cherry-pick` pode ser usado em conjunto com outros comandos, conhecid

Sim, existem várias possibilidades de uso do comando `cherry-pick`. Você pode ver mais detalhes sobre o comando `cherry-pick` na [documentação oficial](https://git-scm.com/docs/git-cherry-pick/pt_BR).

Ir para: [4.1. Gitflow - O que é Git Flow](../4-gitflow/o-que-e-gitflow.md)
2 changes: 1 addition & 1 deletion 3-comandos/fetch.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ Ou podemos especificar uma branch:
git fetch origin master
```

Ir para: [3.11. Log](../3-comandos/log.md)
Ir para: [3.13. Log](../3-comandos/log.md)
2 changes: 1 addition & 1 deletion 3-comandos/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,4 @@ exibir o histórico de uma arquivo em especifico
git log -- <caminho_do_arquivo>
```

Ir para: [4.1 Gitflow - O que é Git Flow](../4-gitflow/o-que-e-gitflow.md)
Ir para: [3.14. Stash](stash.md)
2 changes: 1 addition & 1 deletion 3-comandos/rebase.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,4 @@ Caso erremos durante o rebase podemos abortá-lo para não perder o código e co
git rebase --abort
```

Ir para: [3.11. Reset](reset.md)
Ir para: [3.10. Reset](reset.md)
2 changes: 1 addition & 1 deletion 3-comandos/reset.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ Com o `--soft` podemos voltar para uma hash de um commit mantendo os arquivos ed
git reset --soft d60329e
```

Ir para: [3.11. Fetch](../3-comandos/fetch.md)
Ir para: [3.11. Revert](../3-comandos/revert.md)
158 changes: 158 additions & 0 deletions 3-comandos/revert.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
# Revert

O revert é um comando utilizado para reverter commits anteriores. Diferente do git reset, o git revert não altera a árvore de commits, ao invés disso, ele cria novos commits com mensagens no registro de log, informando quais commits foram revertidos. Isso faz com que ele seja a abordagem mais segura quando se deseja desfazer alterações na branch principal (main).

```bash
$ git revert <commit>
```

O reset recebe um commit como parâmetro, podendo ser utilizado com HEAD~ ou a HASH do commit.

## Opções

`-e` ou `--edit`

Permite alterar a mensagem do commit antes da reversão.

`--no-edit`

Não inicia o editor de mensagens do commit.

`-n` ou `--no-commit`

Executa a operação de reversão sem adicionar um commit.

## Comandos auxiliares

`—-continue`

Continua a operação em andamento. Comumente utilizado após resolver os conflitos gerados durante a operação.

`—-skip`

Ignora o commit atual e continua a operação.

`—-abort`

Cancela a operação abortando o comando.

## Exemplo

Para exemplificar o uso do comando, criamos uma nova pasta e iniciamos o git através do comando `$ git init`. Dentro da pasta, criamos um `arquivo.txt` com algumas linhas de texto, e para cada uma das linhas adicionamos um commit.

Executando o comando `$ git log`, o terminal nos apresenta os seguintes commits:

```
commit 71b26e3ee9f099a91e22bc339b788693458c4df5 (HEAD -> main)
Date: Wed May 8 11:34:13 2024 -0300

terceiro commit

commit 42f689186678cd06700d074aa07fb4694a4e13a1
Date: Wed May 8 11:33:57 2024 -0300

segundo commit

commit b6d27522f5ef188008857b145458b8008d420932
Date: 11:33:47 Wed May 8 11:33:42 2024 -0300

primeiro commit
```

Neste momento, o conteúdo do nosso _arquivo.txt_ está da seguinte forma:

```txt
linha inserida no primeiro commit
linha inserida no segundo commit
linha inserida no terceiro commit
```

Agora, vamos executar o comando de reversão:

```bash
$ git revert HEAD~0
```

O comando acima irá desfazer o último commit presente na árvore de commits. Além disso, ele também irá adicionar um novo, com as informações de qual commit foi desfeito.

```
commit 5bf52ac3b69588613b15fa68009c9962bbd357ae (HEAD -> main)
Date: Wed May 8 11:35:32 2024 -0300

Revert "terceiro commit" <-- mensagem do revert

This reverts commit 71b26e3ee9f099a91e22bc339b7886934584df5. <-- hash do commit desfeito

commit 71b26e3ee9f099a91e22bc339b788693458c4df5
Date: Wed May 8 11:34:13 2024 -0300

terceiro commit

commit 42f689186678cd06700d074aa07fb4694a4e13a1
Date: Wed May 8 11:33:57 2024 -0300

segundo commit

commit b6d27522f5ef188008857b145458b8008d420932
Date: Wed May 8 11:33:42 2024 -0300

primeiro commit
```

Com isso, a última linha do nosso arquivo foi removida, pois ela havia sido adicionada no terceiro commit.

Para finalizar o nosso exemplo, vamos adicionar mais commit e, em seguida, executar o comando:

```bash
$ git revert HEAD~3
```

Uma nova operação será iniciada, e com ela teremos alguns conflitos para resolver. Após aceitas as altearções recebidas, podemos usar o comando auxiliar `--continue` para finalizar a operação.

```bash
$ git revert --continue
```

Isso fará com que o segundo commit e todos os posteriores sejam desfeitos, voltando o conteúdo do nosso arquivo para o estado do primeiro commit, ou seja, ele terá apenas a "linha inserida no primeiro commit".

Acessando novamente o log, teremos os seguintes commits na nossa árvore:

```
commit 99d8d5a91bd570adee1371eacab8a053f998e02c (HEAD -> main)
Date: Wed May 8 11:39:54 2024 -0300

Revert "segundo commit"

This reverts commit 42f689186678cd06700d074aa07fb4694a4e13a1.

commit 2d3da358452ec7be9eb8229c2d70ee841b6b7d45
Date: Wed May 8 11:38:00 2024 -0300

commit depois do revert

commit 5bf52ac3b69588613b15fa68009c9962bbd357ae (HEAD -> main)
Date: Wed May 8 11:35:32 2024 -0300

Revert "terceiro commit"

This reverts commit 71b26e3ee9f099a91e22bc339b7886934584df5.

commit 71b26e3ee9f099a91e22bc339b788693458c4df5
Date: Wed May 8 11:34:13 2024 -0300

terceiro commit

commit 42f689186678cd06700d074aa07fb4694a4e13a1
Date: Wed May 8 11:33:57 2024 -0300

segundo commit

commit b6d27522f5ef188008857b145458b8008d420932
Date: Wed May 8 11:33:42 2024 -0300

primeiro commit
```

Para mais opções e comandos auxiliares, acesse a documentação do [Git Revert](https://git-scm.com/docs/git-revert/pt_BR).

Ir para: [3.12. Fetch](../3-comandos/fetch.md)
4 changes: 3 additions & 1 deletion 3-comandos/stash.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,6 @@ Vamos testar na pratica ainda com a pasta que você criou:

O comando `git stash` pode ser útil em varios casos diversos e definitivamente é uma comando
poderoso para se ter ciência, vale a pena conferir na [documentação](https://git-scm.com/docs/git-stash)
para aprender mais sobre esse comando.
para aprender mais sobre esse comando.

Ir para: [3.15. Cherry-pick](cherry-pick.md)
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@
8. [Tag](/3-comandos/tag.md)
9. [Rebase](/3-comandos/rebase.md)
10. [Reset](/3-comandos/reset.md)
11. [Fetch](/3-comandos/fetch.md)
12. [Log](/3-comandos/log.md)
13. [Stash](3-comandos/stash.md)
14. [Cherry-pick](/3-comandos/cherry-pick.md)

11. [Revert](/3-comandos/revert.md)
12. [Fetch](/3-comandos/fetch.md)
13. [Log](/3-comandos/log.md)
14. [Stash](3-comandos/stash.md)
15. [Cherry-pick](/3-comandos/cherry-pick.md)

### GitFlow

Expand Down