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:

git reflog

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.

  1. 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ó
    
  2. Identifiquem el commit que volem recuperar (en aquest cas, 5d6e7f8).

  3. 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

  1. Executem git fsck per trobar objectes perduts:

    $ git fsck --lost-found
    dangling commit 5d6e7f8
    
  2. 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
    
  3. Utilitzem git reset per restaurar el commit:

    git reset --hard 5d6e7f8
    

Exercicis Pràctics

Exercici 1: Recuperar un Commit Perdut

  1. Crea un nou repositori i afegeix alguns commits.
  2. Fes un reset a un commit anterior.
  3. Utilitza git reflog per trobar el commit perdut.
  4. Restaura el commit utilitzant git reset.

Solució

  1. 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"
    
  2. Fes un reset a un commit anterior:

    git reset --hard HEAD~1
    
  3. Utilitza git reflog per trobar el commit perdut:

    git reflog
    
  4. 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

Mòdul 3: Branques i Fusió

Mòdul 4: Treballant amb Repositoris Remots

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

Mòdul 8: Millors Pràctiques i Consells de Git

Mòdul 9: Resolució de Problemes i Depuració

Mòdul 10: Git en el Món Real

© Copyright 2024. Tots els drets reservats