Git reflog

Git avansat

Amanda Crawford-Adamo

Software and Data Engineer

Ce este Git Reflog?

  1. Înregistrare locală a TUTUROR actualizărilor de referințe din repository
  2. Reflog-ul este stocat local în directorul .git/logs/refs/heads/
  3. Înregistrează modificările la vârfurile de branch și poziția HEAD
  4. Reprezintă o măsură de siguranță pentru operațiunile Git
  5. Ajută la recuperarea modificărilor sau ștergerilor accidentale

Exemplu de grafic al modificărilor din istoricul Git

Git avansat

Git Reflog versus Git Log

Caracteristică Git Reflog Git Log
Scop Afișează actualizările și rescrierile referințelor în repo local Afișează doar istoricul commit-urilor
Domeniu Doar repository local Repository local și remote
Conținut Toate actualizările de referințe (commit-uri, reset-uri, merge-uri etc.) Doar commit-uri
Persistență Temporar (de obicei 90 de zile) Permanent (parte din istoricul repository-ului)
Utilizare Recuperarea commit-urilor pierdute, înțelegerea acțiunilor recente Vizualizarea istoricului proiectului, înțelegerea dezvoltării funcționalităților
Git avansat

Comenzi Reflog

  • Afișează datele din log și activitatea HEAD
    git reflog
    git reflog show
    
  • Curăță intrările vechi sau inaccesibile
    git reflog expire
    
Git avansat

Structura Ieșirii Reflog

Detalii ale structurii textului de ieșire reflog

Exemplu de ieșire reflog în terminal

Componentă Descriere
short-hash Hash prescurtat al commit-ului
ref De obicei HEAD, dar poate fi și numele unui branch
index Poziția în reflog (0 este cea mai recentă)
action Tipul acțiunii (commit, reset, merge etc.)
descriptions Descriere a acțiunii
1 https://hackernoon.com/time-to-rewrite-your-git-history-effectively-with-git-reflog
Git avansat

Filtrare: Since și Until

  • since = afișează intrările începând cu acest moment

    git reflog --since "time-qualifer"
    
  • until = afișează intrările până la acest moment

    git reflog --until "time-qualifer"
    
Utilizare
git reflog --since="1 week ago"
git reflog --until="yesterday"
git reflog --until="2024-01-01"
Git avansat

Recuperarea Branch-urilor Șterse

Scenariu

  • Am creat un branch numit etl-feature
  • Am adăugat modificări ETL în acest branch
  • Am șters accidental acest branch
  • Toate modificările au fost pierdute

Cum restaurăm branch-ul etl-feature?

Soluție

  1. Identificați hash-ul commit-ului de la vârful branch-ului șters cu git reflog
  2. Utilizați checkout pentru a muta HEAD la hash-ul respectiv
  3. Creați un branch nou din commit-ul indicat de HEAD
git reflog
git checkout <hash>
git checkout -b <branch-name>
1 https://stackoverflow.com/questions/3640764/can-i-recover-a-branch-after-its-deletion-in-git
Git avansat

Git Reset

  • Mută HEAD la un commit specificat.
  • În funcție de tipul de reset, zona de lucru și staging sunt actualizate.
Tip reset Comandă Efect asupra directorului de lucru Efect asupra staging
Soft git reset --soft <commit> Nicio modificare Modificările rămân în staging
Mixed (implicit) git reset --mixed <commit> Nicio modificare Modificările sunt scoase din staging
Hard git reset --hard <commit> Modificările sunt eliminate Modificările sunt eliminate
Git avansat

Găsirea unui Commit Pierdut

Scenariu

  • Testele au început să eșueze după commit-uri și rebase-uri
  • Commit-ul care a cauzat problema este necunoscut
  • Trebuie să revenim la o stare funcțională

Cum revenim la versiunea anterioară a scriptului ETL?

Soluție

  1. Găsiți hash-ul commit-ului pierdut cu Git Reflog
  2. Utilizați git reset pentru a reveni la commit-ul cu testele funcționale
git reflog
git reset --soft HEAD@{1}
Git avansat

Bune Practici

  • Util pentru recuperarea codului și commit-urilor pierdute
  • Utilizați mesaje de commit descriptive
  • Publicați modificările pe remote în mod regulat
  • Fiți precauți cu push-urile forțate

Reflog este mașina noastră locală a timpului atunci când facem greșeli

Imagine a unui ceas care merge înapoi în timp

Git avansat

Să exersăm!

Git avansat

Preparing Video For Download...