Netyčia į Git perdaviau ne tuos failus, bet dar neperdaviau jų į serverį.
Kaip galiu atšaukti tuos pakeitimus iš vietinės saugyklos?
$ git commit -m "Something terribly misguided" # (1)
$ git reset HEAD~ # (2)
<< edit files as necessary >> # (3)
$ git add ... # (4)
$ git commit -c ORIG_HEAD # (5)
git status
jie bus rodomi kaip "Changes not staged for commit", todėl prieš įsipareigojimo atlikimą turėsite juos pridėti iš naujo). Jei norite tik pridėti daugiau pakeitimų prie ankstesnio įsipareigojimo arba pakeisti įsipareigojimo pranešimą, galite naudoti git reset --soft HEAD~``, kuris yra panašus į
git reset HEAD~``2, bet palieka esamus pakeitimus.git add
įtraukite viską, ką norite įtraukti į savo naująjį pakeitimą.reset
nukopijavo senąją galvą į .git/ORIG_HEAD
; commit
su -c ORIG_HEAD
atidarys redaktorių, kuriame iš pradžių bus įrašytas senosios ataskaitos žurnalinis pranešimas ir galėsite jį redaguoti. Jei jums nereikia redaguoti pranešimo, galite naudoti -C
parinktį.Tačiau saugokitės, kad jei į indeksą įtraukėte naujų pakeitimų, naudojant commit --amend
jie bus pridėti prie ankstesnio įsipareigojimo.
Jei kodas jau perkeltas į serverį ir turite teises perrašyti istoriją (rebase), tuomet:
git push origin master --force
Taip pat galite pažvelgti į šį atsakymą:
Pirmiau pateiktame atsakyme rasite git reflog
, kuris naudojamas norint sužinoti, koks yra SHA-1, į kurį norite grįžti. Radę tašką, į kurį norite atšaukti, naudokite pirmiau paaiškintą komandų seką.
1 Tačiau atkreipkite dėmesį, kad jums nebūtina grįžti prie ankstesnio įsipareigojimo, jei tiesiog padarėte klaidą įsipareigojimo pranešime. Paprastesnis variantas yra git reset
(kad panaikintumėte visus pakeitimus, kuriuos atlikote po to) ir tada git commit --amend
, kuris atidarys numatytojo įsipareigojimo pranešimo redaktorių, iš anksto užpildytą paskutiniuoju įsipareigojimo pranešimu.
2 HEAD~
yra tas pats, kas HEAD~1
.
Pridėkite ir pašalinkite failus, kad viskas būtų taip, kaip norite:
git rm classdir
git add sourcedir
Tada pakeiskite įsipareigojimą:
git commit --amend
Ankstesnis klaidingas pakeitimas bus redaguojamas, kad atspindėtų naują indekso būseną - kitaip tariant, bus taip, tarsi tos klaidos niekada nebūtumėte padarę.
Atkreipkite dėmesį, kad tai turėtumėte daryti tik tuo atveju, jei dar nesate išstūmę. Jei jau išstūmėte, tuomet tiesiog turėsite paprastai patvirtinti pataisymą.
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"
arba
git reset --hard HEAD~1
Įspėjimas: Aukščiau pateikta komanda visam laikui pašalins .java
failų (ir visų kitų failų) pakeitimus, kuriuos norėjote patvirtinti.
Tvirtas atstatymas
į HEAD-1
nustatys jūsų darbinę kopiją į būseną, buvusią prieš jūsų klaidingą atidavimą.