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