Mai mult
Găsi și de a restabili un fișier șters într-un depozit Git
Spune I'm într-un depozit Git. Am șterge un fișier și să se angajeze că se schimbe. Am continua să lucreze și să facă unele mai comite. Apoi, am nevoie pentru a restabili acest fișier.
Știu că pot checkout-un fișier folosind git checkout CAP^ foo.bar`, dar eu nu't într-adevăr știu când fișierul a fost șters.
- Ce ar fi cel mai rapid mod de a găsi comite că elimină un anumit fisier?
- Ce ar fi cel mai simplu mod de a obține înapoi în copia de lucru?
Am'm sperând că don't trebuie să manual răsfoiește-mi busteni, de verificare a întregului proiect pentru un anumit SHA și apoi copiați manual acel fișier în proiectul original checkout.
2703
24
Găsi ultimul commit, care a afectat dat drumul. Deoarece fișierul nu't în CAP comis-o, asta se angajeze trebuie să le fi șters.
Unde
$comite
este valoarea obliga'am găsit-o la pasul 1, de exemplu,e4cf499627
Pentru a restabili toate aceste fișiere șterse într-un dosar introduceți următoarea comandă.
Am venit la această întrebare în căutarea de a restabili un fișier tocmai am șters-o, dar nu m't comis încă schimbarea. Doar în cazul în care vă aflați în această situație, tot ce trebuie să faceți este următoarea:
git checkout CAP-path/to/file.ext
Dacă ești nebun, utilizarea
git-bisectoarea
. Aici's ce sa fac:Acum's timp pentru a rula automat de testare. Shell comanda
'[ -e foo.bar ]'
se va întoarce 0 dacăfoo.bar
există, și 1 în caz contrar. "run" comandagit-bisectoarea
va folosi binar de căutare pentru a găsi automat primul comite în cazul în care testul eșuează. Acesta începe la jumătatea interval dat (de la bine la rău) și taie-l în jumătate pe baza rezultatelor de încercare specificate.Acum're la comiterea care a șters-o. De aici, puteți sări înapoi în viitor și de a folosi
git-revert
pentru a anula modificarea,sau ai putea merge înapoi cu o comite și manual inspecta pagubele:
Noul meu favorit alias, bazat pe bonyiii's răspunde (upvoted), și propriul meu răspuns despre "Trece un argument pentru un Git comanda alias":
Am pierdut un fișier șters din greșeală câteva angajează în urmă? Rapid:
Criza a fost evitată.
Robert Dailey propune în comentarii următoarele alias:
Și jegan adauga în comentarii:
Dacă știți numele fișierului, acesta este un mod simplu, cu comenzi de bază:
Lista toate se angajează pentru acel fișier.
Ultimul commit (cel mai de sus) este cea care a eliminat fișierul. Deci, aveți nevoie pentru a restabili al doilea la ultimul commit.
Pentru a restabili o șterse și angajat fișier:
Acesta a fost testat pe Git versiune 1.7.5.4.
Dacă ai făcut schimbări și șters un fișier, dar nu a comis-o, și acum te-ai despărțit, cu modificările
dar fișierele șterse nu sa mai întors, pur și simplu face următoarea comandă:
Am'am această soluție.
git log --grep=*cuvânt*
git log-Sabie
git log | grep --context=5 *cuvânt*
git log-stat | grep --context=5 *cuvânt*
# recomandat, dacă aveți cu greu amintesc nimic3. Acum, folosind comite id bfe68bd117e1091c96d2976c99b3bcc8310bebe7 face:
Ca a comis id referințe comite în cazul în care fișierul a fost șters deja aveți nevoie pentru a face referire comite înainte de bfe68b care te poate face prin adăugarea
^1
. Acest lucru înseamnă: dă-mi comite înainte de bfe68b.git undelete path/to/file.ext
git config --global alias.undelete '!sh -c "git checkout $(git rev-lista -n 1 CAP - $1)^ -- $1" -'
git undelete path/to/file.ext
Acest alias verifică mai întâi pentru a găsi ultimul comite în cazul în care acest dosar a existat, apoi face un git checkout de faptul că, calea de fișier de la ultimul commit în cazul în care acest dosar a existat. source
În multe cazuri, poate fi util să se folosească coreutils (grep, sed, etc.) în legătură cu Git. Știu deja aceste instrumente destul de bine, dar Git cu atât mai puțin. Dacă am vrut să fac o căutare pentru un fișier șters, aș face următoarele:
Când am găsi revizuirea/comite:
Doar ca altii au declarat înainte de mine.
Fișierul va fi restaurat la starea pe care o avea înainte de îndepărtare. Amintiți-vă să re-angajeze la arborele de lucru, dacă doriți să păstrați-l în jurul.
Așa că am avut de a restabili o grămadă de fișiere șterse de pe un anumit comis-o și am reușit cu două comenzi:
(Notă trailing space pe fiecare sfârșit de comandă.)
Fișierele au fost adăugate .gitignore fișier și apoi șters cu git rm, am nevoie pentru a restaura fișierele, dar apoi unstage ei. Am avut sute de fișiere pentru a restabili, tastarea lucruri manual pentru fiecare fișier ca și în alte exemple fost de gând să fie prea lent.
De fapt, această întrebare este direct despre
Git
, dar pentru cineva ca mine, funcționează cu instrumente GUI ca WebStormVCS, altele decât știind despre git
cli` comenzi.Faceți clic dreapta pe calea care conține fișierul șters, apoi du-te la
Git
, și faceți apoi clic peShow Istorie
.VCS instrumente arată toate reviziile tren și eu pot vedea toate comite și schimbări de fiecare dintre ele.
Apoi am selectați se angajează ca prietenul meu a șterge `PostAd.js dosarul lui. acum vedea mai jos:
Și acum, pot să-mi văd dorința de fișier șters. Am doar dublu-clic pe numele fișierului și se recuperează.
Știu că răspunsul meu este nu
Git
de comenzi, dar este rapid, de încredere și ușor pentru începători și profesioniști dezvoltatori. Webstorm VCS instrumente sunt minunat și perfect pentru a lucra cuGit
și nu't nevoie de nici un alt plugin sau instrumente.Am avut aceeași întrebare. Fără să știe, mi-a creat o marionetă comite.
Lista marionetă comite
`git fsck-a pierdut-găsit
Inspecta fiecare marionetă comite
git reset-hard <comite id>
Fișierele mele reapărut când m-am mutat la marionetă a comis-o.
`git de stare pentru un motiv:
"CAP detașat de la <comite de identitate în cazul în care este detașat>"
Restabili fișier șters:
În cazul nostru ne-am șters din greșeală fișiere într-un comite și unele comite mai târziu ne-am dat seama de greșeala noastră și a vrut pentru a obține înapoi toate fișierele care au fost șterse, dar nu cele care au fost modificate.
Bazat pe Charles Bailey's excelentă aici răspunsul meu este unul de linie:
Dacă știi comite care a eliminat fișierul(e), executați această comandă în cazul în care
<SHA1_deletion>
se comite care a eliminat fișierul:Partea dinainte a țevii listează toate fișierele care au fost șterse în commit; toate sunt plateste de cel anterior se angajează să le restaura.
Găsi comite care a eliminat fișierul dvs.:
Eșantionul de ieșire:
Ca de Git 2.23 acolo este de fapt un "restore" de comandă. Este încă experimental dar, în scopul de a restabili ceva ce a eliminat într-un comite (4711174 în acest caz), puteți apoi tastați:
Notă ^ după comiterea id-ul ca ne-o dorim pentru a restabili ceva din comită înainte cel care a eliminat fișierul.
La `--sursa argumentului spune "restore" comandă în cazul în care să caute fișierul(e) pentru a restabili și poate fi orice comite și chiar index.
A se vedea: git-restaurare doc pentru git 2.23.0