Es zinu, ka Git izseko manas lietojumprogrammā veiktās izmaiņas un saglabā tās līdz brīdim, kad es veicu izmaiņas, bet šeit es esmu apjucis:
Kad es gribu atgriezties pie iepriekšējās atkāpes, es izmantoju:
git reset --hard HEAD
Un Git atgriež:
HEAD is now at 820f417 micro
Kā tad atgriezt failus cietajā diskā atpakaļ uz iepriekšējo nodošanu?
Mani nākamie soļi bija šādi:
git add .
git commit -m "revert"
Bet neviens no failiem nav mainījies manā cietajā diskā...
Ko es daru pareizi vai nepareizi?
Pirmkārt, vienmēr ir vērts atzīmēt, ka git reset --hard
ir potenciāli bīstama komanda, jo tā dzēš visas neizdarītās izmaiņas. Drošības labad pirms git status
izmantošanas vienmēr jāpārbauda, vai git status
izvades rezultāts ir tīrs (tas ir, tukšs).
Sākotnēji jūs sakāt šādi:
Es zinu, ka Git izseko manas lietojumprogrammā veiktās izmaiņas un saglabā tās līdz brīdim, kad es veicu izmaiņas, bet šeit es sastrīdu:
Tas ir nepareizi. Git reģistrē failu stāvokli tikai tad, kad jūs tos pakāpjat (ar git add
) vai kad jūs izveidojat apstiprinājumu. Tiklīdz esat izveidojis kopiju, kurā jūsu projekta faili ir konkrētā stāvoklī, tie ir ļoti droši, bet līdz tam brīdim Git nav īsti "sekojošs jūsu failu izmaiņu izsekojums". (piemēram, pat tad, ja jūs veicat git add
, lai izveidotu jaunu faila versiju, tas pārraksta iepriekš izveidotās faila versijas, kas atrodas faila izveides zonā.)
Tālāk jautājumā jūs uzdodat šādu jautājumu:
Kad es gribu atgriezties pie iepriekšējās kopijas, es izmantoju: git reset --hard HEAD Un git atgriež: HEAD tagad ir 820f417 micro
Kā tad man atgriezt failus cietajā diskā atpakaļ uz šo iepriekšējo nodošanu?
Ja veicat git reset --hard <SOME-COMMIT>
, tad Git:
master
) atpakaļ uz punktu <SOME-COMMIT>
.<SOME-COMMIT>
.HEAD
norāda uz jūsu pašreizējo atzaru (vai pašreizējo nodošanu), tāpēc viss, ko git reset --hard HEAD
izdarīs, būs visu neizdoto izmaiņu izmešana.
Pieņemsim, ka labā nodošana, pie kuras vēlaties atgriezties, ir f414f31
. (To var atrast, izmantojot git log
vai jebkuru vēstures pārlūku.) Tad jums ir dažas dažādas iespējas atkarībā no tā, ko tieši vēlaties darīt:
Mainīt savu pašreizējo zaru, lai tā vietā norādītu uz vecāko nodevumu. To var izdarīt ar git reset --hard f414f31
. Tomēr tas pārraksta jūsu atzara vēsturi, tāpēc jums no tā vajadzētu izvairīties, ja esat šo atzaru kopīgojis ar citiem. Turklāt pēc f414f31
veiktie nodevumi vairs nebūs jūsu galvenā
atzara vēsturē.
Izveidojiet jaunu nodevumu, kas atspoguļo tieši tādu pašu projekta stāvokli kā f414f31
, bet tikai pievieno to vēsturei, lai jūs nezaudētu vēsturi. To var izdarīt, izmantojot šajā atbildē ieteiktos soļus - kaut ko līdzīgu:
Piemēram, rīkojieties šādi: git reset --hard f414f31
git reset --soft HEAD@{1}
git commit -m "Atgriežas pie projekta stāvokļa f414f31"
Brīdinājums:
git clean -f
dzēsīs neizsekojamus failus, kas nozīmē, ka tie pazudīs uz visiem laikiem, jo tie nav saglabāti repozitorijā. Pirms to veicat, pārliecinieties, ka patiešām vēlaties noņemt visus neizsekojamos failus.
Izmēģiniet to un skatiet git clean -f
.
git reset --hard
neizdzēsīs neizsekojamos failus, bet git-clean
izdzēsīs visus failus no izsekojamā saknes direktorija, kas nav Git izsekojami.
Alternatīvi, kā teica @Paul Betts, varat rīkoties šādi (tomēr jāuzmanās - tādējādi tiek dzēsti arī visi ignorētie faili).
git clean -df
git clean -xdf
UZMANĪBU! Tas arī izdzēsīs ignorētos failus