L'acció revert sols permet desfer un commit a la vegada.
En cas de voler desfer múltiples commits,
es pot aplicar la comanda revert de forma successiva
a cada commit que es vol desfer amb la opció --no-commit.
Aquest procés posarà el repositori en un estat REVERTING
i afegira els canvis a l'Àrea de Preparació (Staging Area).
En aquest punt, es poden revertir més commits
o finalitzar el procés amb git revert --continue.
Aquesta acció pot generar conflictes si els canvis que es volen desfer
han estat modificats en commits posteriors.
En aquest cas, passarem a l'estat REVERTING i caldrà resoldre els conflictes
manualment, de la mateixa manera que es fa en una fusió de branques (merge).
Exemple: Resolució de conflictes en git revert
jpuigcerver@fp:~/git_cherrypick(main)$gitlga
*aa99382-(0 seconds ago)Revert "Canvi C i D"-Joan Puigcerver(HEAD -> main)*2f610b9-(1 second ago)Revert "Canvi E"-Joan Puigcerver*ff4ae1c-(1 second ago)Canvi E-Joan Puigcerver*a079d5b-(1 second ago)Canvi D-Joan Puigcerver*75f51e1-(1 second ago)Canvi C-Joan Puigcerver*fad1ea7-(1 second ago)Canvi B-Joan Puigcerver*4d18d71-(1 second ago)Canvi A-Joan Puigcerver*810ec42-(1 second ago)Commit inicial-Joan Puigcerverjpuigcerver@fp:~/git_cherrypick(main)$gitrevert4d18d71
Auto-merging README.mdCONFLICT (content): Merge conflict in README.mderror: could not revert 4d18d71... Canvi Ahint: After resolving the conflicts, mark them withhint: "git add/rm <pathspec>", then runhint: "git revert --continue".hint: You can instead skip this commit with "git revert --skip".hint: To abort and get back to the state before "git revert",hint: run "git revert --abort".hint: Disable this message with "git config advice.mergeConflict false"jpuigcerver@fp:~/git_cherrypick(main|REVERTING)$gitstatus
On branch mainYou are currently reverting commit 4d18d71. (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)both modified: README.mdno changes added to commit (use "git add" and/or "git commit -a")jpuigcerver@fp:~/git_cherrypick(main|REVERTING)$vimREADME.md# (1)!jpuigcerver@fp:~/git_cherrypick(main|REVERTING)$gitdiff
diff --cc README.mdindex 5377894,376d064..0000000--- a/README.md+++ b/README.md@@@ -1,3 -1,1 +1,2 @@@ # Git revert i cherrypick
- - Canvi A+- Canvi B
jpuigcerver@fp:~/git_cherrypick(main|REVERTING)$gitaddREADME.md
jpuigcerver@fp:~/git_cherrypick(main|REVERTING)$gitrevert--continue--no-edit
[main 6a5c752] Revert "Canvi A" 1 file changed, 1 deletion(-)jpuigcerver@fp:~/git_cherrypick(main)$gitlga
*6a5c752-(0 seconds ago)Revert "Canvi A"-Joan Puigcerver(HEAD -> main)*aa99382-(0 seconds ago)Revert "Canvi C i D"-Joan Puigcerver*2f610b9-(1 second ago)Revert "Canvi E"-Joan Puigcerver*ff4ae1c-(1 second ago)Canvi E-Joan Puigcerver*a079d5b-(1 second ago)Canvi D-Joan Puigcerver*75f51e1-(1 second ago)Canvi C-Joan Puigcerver*fad1ea7-(1 second ago)Canvi B-Joan Puigcerver*4d18d71-(1 second ago)Canvi A-Joan Puigcerver*810ec42-(1 second ago)Commit inicial-Joan Puigcerver
S'ha editat manualment el fitxer per eliminar els marcadors de
conflicte i la línia - Canvi A.
Aquesta acció pot generar conflictes si els canvis que es volen aplicar
es produeixen en llocs que han segut modificats.
En aquest cas, passarem a l'estat CHERRY-PICKING i caldrà resoldre els conflictes
manualment, de la mateixa manera que es fa en una fusió de branques (merge).
Exemple: Resolució de conflictes en git cherry-pick
En aquest cas, git cherry-pick ha generat un conflicte ja que
Canvi A modificava la mateixa línia que Canvi B.
jpuigcerver@fp:~/git_cherrypick(main)$gitlga
*0c28064-(1 second ago)Canvi C-Joan Puigcerver(HEAD -> main)*6a5c752-(0 seconds ago)Revert "Canvi A"-Joan Puigcerver*aa99382-(0 seconds ago)Revert "Canvi C i D"-Joan Puigcerver*2f610b9-(1 second ago)Revert "Canvi E"-Joan Puigcerver*ff4ae1c-(1 second ago)Canvi E-Joan Puigcerver*a079d5b-(1 second ago)Canvi D-Joan Puigcerver*75f51e1-(1 second ago)Canvi C-Joan Puigcerver*fad1ea7-(1 second ago)Canvi B-Joan Puigcerver*4d18d71-(1 second ago)Canvi A-Joan Puigcerver*810ec42-(1 second ago)Commit inicial-Joan Puigcerverjpuigcerver@fp:~/git_cherrypick(main)$gitcherry-pick4d18d71
Auto-merging README.mdCONFLICT (content): Merge conflict in README.mderror: could not apply 4d18d71... Canvi Ahint: After resolving the conflicts, mark them withhint: "git add/rm <pathspec>", then runhint: "git cherry-pick --continue".hint: You can instead skip this commit with "git cherry-pick --skip".hint: To abort and get back to the state before "git cherry-pick",hint: run "git cherry-pick --abort".hint: Disable this message with "git config advice.mergeConflict false"jpuigcerver@fp:~/git_cherrypick(main|CHERRY-PICKING)$vimREADME.md# (1)!jpuigcerver@fp:~/git_cherrypick(main|CHERRY-PICKING)$gitdiff
diff --cc README.mdindex d6c55ca,2754255..0000000--- a/README.md+++ b/README.md@@@ -1,3 -1,2 +1,4 @@@ # Git revert i cherrypick
+ - Canvi A+- Canvi B
+- Canvi C
jpuigcerver@fp:~/git_cherrypick(main|CHERRY-PICKING)$gitaddREADME.md
jpuigcerver@fp:~/git_cherrypick(main|CHERRY-PICKING)$gitrevert--continue--no-edit
[main d0bf36e] Canvi A Date: Sun Oct 20 22:15:45 2024 +0200 1 file changed, 1 insertion(+)jpuigcerver@fp:~/git_cherrypick(main)$gitlga
*d0bf36e-(1 second ago)Canvi A-Joan Puigcerver(HEAD -> main)*0c28064-(1 second ago)Canvi C-Joan Puigcerver*6a5c752-(0 seconds ago)Revert "Canvi A"-Joan Puigcerver*aa99382-(0 seconds ago)Revert "Canvi C i D"-Joan Puigcerver*2f610b9-(1 second ago)Revert "Canvi E"-Joan Puigcerver*ff4ae1c-(1 second ago)Canvi E-Joan Puigcerver*a079d5b-(1 second ago)Canvi D-Joan Puigcerver*75f51e1-(1 second ago)Canvi C-Joan Puigcerver*fad1ea7-(1 second ago)Canvi B-Joan Puigcerver*4d18d71-(1 second ago)Canvi A-Joan Puigcerver*810ec42-(1 second ago)Commit inicial-Joan Puigcerver
S'ha editat manualment el fitxer per eliminar els marcadors de
conflicte i posar Canvi A abans de Canvi B.