<div class="page"> <div class="cover text-center"> <img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo"> # Revert <div class="text-end fit-content ms-auto my-3 mt-auto pt-3"> <p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p> <p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p> <p><strong>Curs:</strong> 2024/2025</p> </div> <div> <p class="fw-bold mb-0">Llicència: BY-NC-SA</p> <p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p> <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank"> <img class="mx-auto" src="/itb/images/license.png" alt="Licence"/> </a> </div><!--license--> </div><!--cover--> </div><!--page--> {:toc} ## Introducció L'acció `revert` en Git serveix per revertir els canvis realitzats en un _commit_ anterior. Aquesta acció __crea un nou _commit___ que desfà els canvist fets, fent que el codi torne a l'estat que es trobava abans del _commit_ revertit. Aquesta acció és una bona manera de revertir els canvis sense alterar l'història del repositori, útil sobretot quan es treballa en repositoris compartits amb altres desenvolupadors. ::: danger Modificar la història d'un repositori pot provocar problemes en el futur, especialment si es treballa en repositoris col·laboratius. - https://stackoverflow.com/questions/1491001/what-are-the-practical-consequences-of-rewriting-git-history - https://mirrors.edge.kernel.org/pub/software/scm/git/docs/user-manual.html#problems-With-rewriting-history ::: ```bash git revert <commit> ``` ```mermaid --- title: Revert --- %%{init: { 'logLevel': 'debug', 'theme': 'forest' } }%% gitGraph commit id:"A" commit id: "B -> Reverses A" type: REVERSE commit id:"C" ``` Aquesta opció sols funciona per un únic _commit_. Si es dessitga revertir multiples _commits_, podeu consultar la següent discussió: - https://stackoverflow.com/questions/1463340/how-can-i-revert-multiple-git-commits ## Exemple A partir d'un repositori buit, creem tres commits: ```shell jpuigcerver@FP:~ $ mkdir git_revert jpuigcerver@FP:~ $ cd git_revert/ jpuigcerver@FP:~/git_revert $ git init Initialized empty Git repository in /home/joapuiib/git_revert/.git/ jpuigcerver@FP:~/git_revert (main) $ jpuigcerver@FP:~/git_revert (main) $ echo "# Git revert" >> README.md jpuigcerver@FP:~/git_revert (main) $ git add README.md jpuigcerver@FP:~/git_revert (main) $ git commit -m "Added README.md" [main (root-commit) 8790081] Added README.md 1 file changed, 1 insertion(+) create mode 100644 README.md jpuigcerver@FP:~/git_revert (main) $ echo "- Primer canvi" >> README.md jpuigcerver@FP:~/git_revert (main) $ git commit -a -m "Primer canvi" [main 5266ed4] Primer canvi 1 file changed, 1 insertion(+) jpuigcerver@FP:~/git_revert (main) $ echo "- Segon canvi" >> README.md jpuigcerver@FP:~/git_revert (main) $ git commit -a -m "Segon canvi" [main 707c110] Segon canvi 1 file changed, 1 insertion(+) jpuigcerver@FP:~/git_revert (main) $ echo "- Tercer canvi" >> README.md jpuigcerver@FP:~/git_revert (main) $ git commit -a -m "Tercer canvi" [main 90a3d19] Tercer canvi 1 file changed, 1 insertion(+) jpuigcerver@FP:~/git_revert (main) $ git lga * 90a3d19 - (2 seconds ago) Tercer canvi - Joan Puigcerver (HEAD -> main) * 707c110 - (30 seconds ago) Segon canvi - Joan Puigcerver * 5266ed4 - (47 seconds ago) Primer canvi - Joan Puigcerver * 8790081 - (72 seconds ago) Added README.md - Joan Puigcerver ``` Realitzem un `revert` del segon _commit_: ```shell jpuigcerver@FP:~/git_revert (main) $ git revert 707c110 Auto-merging README.md CONFLICT (content): Merge conflict in README.md error: could not revert 707c110... Segon canvi .yellow{hint: after resolving the conflicts, mark the corrected paths hint: with 'git add <paths>' or 'git rm <paths>' hint: and commit the result with 'git commit'} jpuigcerver@FP:~/git_revert (main|REVERTING) $ git status On branch main You are currently reverting commit 707c110. (fix conflicts and run "git revert --continue") (use "git revert --skip" to skip this patch) (use "git revert --abort" to cancel the revert operation) Unmerged paths: (use "git restore --staged <file>..." to unstage) (use "git add <file>..." to mark resolution) .red{both modified: README.md} joapuiib@miles:~/git_revert (main|REVERTING) $ vi README.md joapuiib@miles:~/git_revert (main|REVERTING) $ cat README.md # Git revert - Primer canvi - Tercer canvi joapuiib@miles:~/git_revert (main|REVERTING) $ git add README.md joapuiib@miles:~/git_revert (main|REVERTING) $ git status On branch main You are currently reverting commit 707c110. (all conflicts fixed: run "git revert --continue") (use "git revert --skip" to skip this patch) (use "git revert --abort" to cancel the revert operation) Changes to be committed: (use "git restore --staged <file>..." to unstage) .green{modified: README.md} joapuiib@miles:~/git_revert (main|REVERTING) $ git revert --continue [main 653f384] Revert "Segon canvi" 1 file changed, 1 deletion(-) joapuiib@miles:~/git_revert (main) $ git lga * 653f384 - (18 seconds ago) Revert "Segon canvi" - Joan Puigcerver (HEAD -> main) * 90a3d19 - (6 minutes ago) Tercer canvi - Joan Puigcerver * 707c110 - (6 minutes ago) Segon canvi - Joan Puigcerver * 5266ed4 - (6 minutes ago) Primer canvi - Joan Puigcerver * 8790081 - (7 minutes ago) Added README.md - Joan Puigcerver joapuiib@miles:~/git_revert (main) $ git show .yellow{commit 653f3840806c025cd46af2a658b68a5be9443807} (.lightblue{HEAD ->} .green{main}) Author: Joan Puigcerver <joapuiib@gmail.com> Date: Mon Dec 4 19:26:02 2023 +0100 Revert "Segon canvi" This reverts commit 707c110332f67fa73af4a97711e373e49174e98f. diff --git a/README.md b/README.md index 4d10c9d..73f281f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ # Git revert - Primer canvi -- Segon canvi - Tercer canvi joapuiib@miles:~/git_revert (main) $ cat README.md # Git revert - Primer canvi - Tercer canvi ```