Categories
Desenvolvimento Git

O ‘git revert’

Eu precisava fazer com que minha cópia local do git ficasse com o conteúdo igual estava há uns 4 commits atrás. Esses 4 commits no meio do caminho já estavam no servidor remoto, então não posso simplesmente jogá-los fora. Então tive de aprender o comando ‘git revert‘.

O ‘git revert‘ cria um ou mais commits com as alterações que desfazem o conteúdo dos commits indesejados. Abaixo escrevi sequências de códigos que ilustram o uso ‘git revert‘.

Desfazendo 1 commit

Quero desfazer o commit 23a10ce que cria o arquivo de nome “CCC”.

[email protected]:git-revert(master)$ git log --pretty=oneline
9d1d944c5f153c4dafb80a8a19009527e6fe9f1a commit 5 - arquivo FFF
66622af8cbf38cf3749145bb37929367dadb8a84 commit 4 - arquivo EEE
35a4e32012dec7931d5f4b32f1121dbcd9318e52 commit 3 - arquivo DDD
23a10ce4592080ac32b1f1e1a779f295ac26a720 commit 2 - arquivo CCC
5d2c7d5b39892afba41ee8537c9384a77ed1e15e commit 1 - arquivo BBB
21d969d160108eb2acecfc9ea5ede8590fba5494 commit 0 - arquivo AAA

[email protected]:git-revert(master)$ ls
AAA BBB CCC DDD EEE FFF

[email protected]:git-revert(master)$ git revert --no-edit 23a10ce
[master cd4fa8a] Revert "commit 2 - arquivo CCC"
1 file changed, 1 deletion(-)
delete mode 100644 CCC

[email protected]:git-revert(master)$ ls
AAA BBB DDD EEE FFF

Desfazendo um conjunto de commits

Quero desfazer desde agora (HEAD) até o commit 23a10ce. Vão sobrar em meu diretório os arquivos AAA e BBB.

[email protected]:git-revert(master)$ git log --pretty=oneline
9d1d944c5f153c4dafb80a8a19009527e6fe9f1a commit 5 - arquivo FFF
66622af8cbf38cf3749145bb37929367dadb8a84 commit 4 - arquivo EEE
35a4e32012dec7931d5f4b32f1121dbcd9318e52 commit 3 - arquivo DDD
23a10ce4592080ac32b1f1e1a779f295ac26a720 commit 2 - arquivo CCC
5d2c7d5b39892afba41ee8537c9384a77ed1e15e commit 1 - arquivo BBB
21d969d160108eb2acecfc9ea5ede8590fba5494 commit 0 - arquivo AAA

[email protected]:git-revert(master)$ ls
AAA BBB CCC DDD EEE FFF
[email protected]:git-revert(master)$ git revert --no-edit 23a10ce^..HEAD
[master aafe3b1] Revert "commit 5 - arquivo FFF"
1 file changed, 1 deletion(-)
delete mode 100644 FFF
[master 55a9493] Revert "commit 4 - arquivo EEE"
1 file changed, 1 deletion(-)
delete mode 100644 EEE
[master ff45a7a] Revert "commit 3 - arquivo DDD"
1 file changed, 1 deletion(-)
delete mode 100644 DDD
[master a2c4050] Revert "commit 2 - arquivo CCC"
1 file changed, 1 deletion(-)
delete mode 100644 CCC

[email protected]:git-revert(master)$ ls
AAA BBB

O ‘git revert’ não volta na história nem reposiciona ponteiros, como faz o ‘git reset’. Ao invés disso, o ‘git revert‘ desfaz alterações que estão no histórico de commits. As alterações feitas pelo ‘git revert‘ podem ser vistas através do log.

Referências

  • https://www.kernel.org/pub/software/scm/git/docs/git-revert.html