En aquest tema, aprendrem com recuperar commits que semblen haver-se perdut. Això pot passar per diverses raons, com ara un reset accidental, una fusió incorrecta o simplement perquè no es troben en la branca esperada. Git proporciona diverses eines per ajudar-nos a trobar i restaurar aquests commits.
Conceptes Clau
Abans de començar, és important entendre alguns conceptes clau:
- Reflog: Un registre de totes les referències (commits, branques, etc.) que han estat modificades en el repositori local.
- SHA-1: Un identificador únic per a cada commit en Git.
- Reset: Una operació que pot canviar l'historial de commits d'una branca.
Utilitzant el Reflog
El reflog
és una eina poderosa que ens permet veure l'historial de totes les operacions que han afectat les referències en el nostre repositori local. Això inclou commits, resets, fusions, etc.
Veient el Reflog
Per veure el reflog
, utilitzem la comanda següent:
Això mostrarà una llista de totes les operacions recents, incloent els identificadors SHA-1 dels commits afectats.
Exemple Pràctic
Suposem que hem fet un reset accidental i hem perdut un commit important. Podem utilitzar el reflog
per trobar el commit perdut.
-
Executem
git reflog
per veure l'historial de referències:$ git reflog 1a2b3c4 (HEAD -> main) HEAD@{0}: reset: moving to HEAD~1 5d6e7f8 HEAD@{1}: commit: Afegit fitxer important 9a0b1c2 HEAD@{2}: commit: Afegit fitxer de configuració
-
Identifiquem el commit que volem recuperar (en aquest cas,
5d6e7f8
). -
Utilitzem
git reset
per moure'ns a aquest commit:git reset --hard 5d6e7f8
Això restaurarà el nostre repositori a l'estat del commit 5d6e7f8
.
Utilitzant git fsck
i git reflog
En alguns casos, pot ser útil combinar git fsck
amb git reflog
per trobar commits perduts.
Exemple Pràctic
-
Executem
git fsck
per trobar objectes perduts:$ git fsck --lost-found dangling commit 5d6e7f8
-
Utilitzem
git reflog
per veure l'historial de referències i trobar el commit perdut:$ git reflog 1a2b3c4 (HEAD -> main) HEAD@{0}: reset: moving to HEAD~1 5d6e7f8 HEAD@{1}: commit: Afegit fitxer important
-
Utilitzem
git reset
per restaurar el commit:git reset --hard 5d6e7f8
Exercicis Pràctics
Exercici 1: Recuperar un Commit Perdut
- Crea un nou repositori i afegeix alguns commits.
- Fes un reset a un commit anterior.
- Utilitza
git reflog
per trobar el commit perdut. - Restaura el commit utilitzant
git reset
.
Solució
-
Crea un nou repositori:
git init touch fitxer1.txt git add fitxer1.txt git commit -m "Afegit fitxer1" touch fitxer2.txt git add fitxer2.txt git commit -m "Afegit fitxer2"
-
Fes un reset a un commit anterior:
git reset --hard HEAD~1
-
Utilitza
git reflog
per trobar el commit perdut:git reflog
-
Restaura el commit utilitzant
git reset
:git reset --hard <SHA-1 del commit perdut>
Resum
En aquesta secció, hem après com utilitzar el reflog
i git fsck
per recuperar commits perduts. Aquestes eines són essencials per a la resolució de problemes i la depuració en Git. Recorda que el reflog
és una eina poderosa que registra totes les operacions que afecten les referències en el teu repositori local, i pot ser la teva millor aliada en situacions de pànic.
Dominar Git: De Principiant a Avançat
Mòdul 1: Introducció a Git
Mòdul 2: Operacions Bàsiques de Git
- Creant un Repositori
- Clonant un Repositori
- Flux de Treball Bàsic de Git
- Preparant i Cometent Canvis
- Veient l'Historial de Commits
Mòdul 3: Branques i Fusió
- Entenent les Branques
- Creant i Canviant de Branques
- Fusionant Branques
- Resolent Conflictes de Fusió
- Gestió de Branques
Mòdul 4: Treballant amb Repositoris Remots
- Entenent els Repositoris Remots
- Afegint un Repositori Remot
- Recuperant i Traient Canvis
- Empenyent Canvis
- Seguint Branques
Mòdul 5: Operacions Avançades de Git
Mòdul 6: Eines i Tècniques de Git
Mòdul 7: Estratègies de Col·laboració i Flux de Treball
- Forking i Pull Requests
- Revisions de Codi amb Git
- Flux de Treball Git Flow
- GitHub Flow
- Integració Contínua amb Git
Mòdul 8: Millors Pràctiques i Consells de Git
- Escrivint Bons Missatges de Commit
- Mantenint un Historial Netejat
- Ignorant Fitxers amb .gitignore
- Millors Pràctiques de Seguretat
- Consells de Rendiment
Mòdul 9: Resolució de Problemes i Depuració
- Problemes Comuns de Git
- Desfent Canvis
- Recuperant Commits Perduts
- Tractant amb Repositoris Corruptes
- Tècniques Avançades de Depuració