Man ir projekts, kurā es palaidu git init
.
Pēc vairākiem izdarītajiem grozījumiem es veicu git status
, kas man teica, ka viss ir atjaunināts un nav vietējo izmaiņu.
Tad es izdarīju vairākas izmaiņas pēc kārtas un sapratu, ka vēlos visu izmest un atgriezties sākotnējā stāvoklī. Vai šī komanda to izdarīs manā vietā?
git reset --hard HEAD
Ja vēlaties atgriezt darba kopijā veiktās izmaiņas, veiciet šo darbību:
git checkout .
Ja vēlaties atgriezt izmaiņas, kas veiktas indeksā (t.i., ko esat pievienojis), rīkojieties šādi. Uzzinājums: tas atjaunos visus jūsu neizvirzītos nodevumus uz master!:
git reset
Ja vēlaties atgriezt izmaiņas, kuras esat izdarījis, rīkojieties šādi:
git revert <commit 1> <commit 2>
Ja vēlaties dzēst neizsekojamus failus (piemēram, jaunus failus, ģenerētus failus):
git clean -f
Vai neizsekojamus direktorijus (piemēram, jaunus vai automātiski ģenerētus direktorijus):
git clean -fd
Piezīme: Varētu arī palaist
git clean -fd
kā
git reset --hard
neizdzēsīs neizsekojamus failus, bet git-clean izdzēsīs visus failus no izsekojamā saknes direktorija, kas nav git izsekojami. BRĪDINĀJUMS - ESIET UZMANĪGI! Vispirms ir lietderīgi veikt "sauso" izmēģinājumu ar git-clean, lai redzētu, ko tas dzēsīs.
Tas ir īpaši noderīgi arī tad, ja saņemat kļūdas ziņojumu
~"performing this command will cause an un-tracked file to be overwritten"
Tas var rasties, darot vairākas lietas, viena no tām ir darba kopijas atjaunināšana, kad jūs un jūsu draugs esat pievienojuši jaunu failu ar tādu pašu nosaukumu, bet viņš to pirmais ir nodevis avota kontrolē, un jums nav svarīgi izdzēst savu neizsekoto kopiju.
Šādā situācijā sausās pārbaudes veikšana arī palīdzēs jums parādīt to failu sarakstu, kuri tiktu pārrakstīti.
Apskatiet git-reflog. Tas uzskaitīs visus stāvokļus, ko tas atceras (pēc noklusējuma 30 dienas), un jūs varat vienkārši izrakstīt to, kuru vēlaties. Piemēram:
$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d