Cum să restabiliți fișierele și folderele individuale la versiuni vechi în Git

Configurare noua (How To)

Situatie

Git este un instrument puternic pentru urmărirea fiecărei versiuni a bazei de cod și este adesea necesar să priviți înapoi în timp și să recuperați versiunile vechi ale fișierelor. Git poate anula comiterile întregi sau reseta întregul depozit, dar poate, de asemenea, să anuleze modificările aduse unui singur fișier sau folder.

Revenire vs. Resetare
De obicei, când „reveniți” un commit, Git aplică un nou commit, aplicând modificările opuse, anulând-o efectiv. Acest lucru este util dacă faceți o greșeală și trebuie să „ștergeți” acea comitere, deși este încă înregistrată în istoric.

Resetarea depozitului este puțin diferită. Puteți anula doar o comitere la un moment dat, dar dacă faceți o resetare git, Git va schimba complet starea repo-ului înapoi la momentul în care a fost făcută această comitare. Acest lucru se face din multe motive, de obicei pentru a șterge commit-urile sau a remedia istoricul ramurilor.

Ambele operațiuni funcționează pe întregul depozit, dar puteți folosi și comenzi similare pentru a efectua aceleași acțiuni pe fișiere sau foldere individuale. De exemplu, utilizarea git reset pe un singur fișier va restabili fișierul la modul în care a fost când a fost efectuată commit-ul. Acest lucru este util dacă doriți doar să alegeți o versiune veche a fișierului din istoricul Git.

Privind versiunile vechi în Git
Soluția low-tech pentru a seta un fișier înapoi la modul în care era înainte este destul de simplă — Github și majoritatea celorlalte servere Git țin evidența istoricului fișierelor dvs. și puteți face simplu clic pe un commit și faceți clic pe „Răsfoiește fișiere” pentru a vedea un un instantaneu al depozitului dvs. din trecut. Apoi puteți descărca fișierul sau puteți copia textul.

Acest lucru este util în special dacă lucrați cu fișiere de cod mari și doriți să vă uitați la versiunile vechi ale funcțiilor pe care le-ați scris. Probabil că nu doriți să anulați întregul lucru în acest caz, doar o singură funcție. Puteți copia codul din acea funcție fără a atinge CLI-ul Git.

Resetarea unui fișier la o versiune veche în Git
În acest depozit de testare, am făcut un commit care a editat README și a adăugat un fișier nou. Dorim să revenim la modificările făcute în README, dar nu vrem să resetam întregul repo înapoi la comiterea inițială.

Soluția este să resetați doar README, verificând o versiune veche a acelui fișier. Comanda de checkout a lui Git face o mulțime de lucruri, cum ar fi schimbarea ramurilor, dar este folosită practic pentru descărcarea fișierelor cu un ID de commit sau de ramură.

Pentru a reseta un fișier înapoi la o versiune veche, va trebui să găsiți ID-ul de comitere din momentul în care doriți să îl resetați. Puteți utiliza git log pentru aceasta, încadrat într-un singur fișier pentru a vedea numai modificările făcute în acel fișier:

git log README.md

Copiați ID-ul pentru comitere, apoi rulați git checkout cu ID-ul și calea fișierului:

git checkout 22710694b25d7ce5297559851beb7d3e4de811bb README.md

Acest lucru va schimba fișierul înapoi, dar nu va confirma încă modificările. Ești liber să-l editezi și să te angajezi când ești gata. În acest exemplu, git checkout a organizat modificările pentru următoarea comitere. Dacă nu doriți să le efectuați, sunteți liber să renunțați la modificări. Acest lucru poate fi util pentru a descărca temporar versiuni vechi de fișiere fără a utiliza Github.

Revenirea modificărilor la fișiere individuale
În mod similar, dacă doriți să anulați modificările într-un singur commit, puteți face acest lucru cu git revert. Cu toate acestea, nu există nicio modalitate de a-l aplica unui singur fișier, dar puteți pur și simplu să renunțați la modificări dacă commit-ul afectează alte fișiere.

Utilizați marcajul –no-commit pentru a permite editarea „comitarii inverse” pe care Git o creează automat.

git revert de8564b131ca6a15a7e7c73f5ef156b119cc0b93

Acest lucru vă va permite să schimbați fișierele înainte de a finaliza refacerea. Dacă există modificări nedorite în etape, le puteți elimina prin intermediul clientului dvs. sau cu un git checkout gol.

git checkout -- file

Solutie

Tip solutie

Permanent

Voteaza

(2 din 6 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?