Kaip grąžinti visus vietinio valdomo „Git“ projekto pakeitimus į ankstesnę būseną?

Turiu projektą, kuriame git init . Po kelių įsipareigojimų, aš padariau git status , kuris man pasakė, kad viskas buvo naujausia ir nebuvo vietos pokyčių.

Tada aš padariau keletą nuoseklių pokyčių ir suprato, kad noriu viską išmesti ir grįžti į savo pradinę būseną. Ar ši komanda tai padarys man?

 git reset --hard HEAD 
1374
18 июля '09 в 10:52 2009-07-18 10:52 Jacques René Mesrine paklausė liepos 18, 09, 10:52 2009-07-18 10:52
@ 12 atsakymų

Jei norite atsisakyti darbo kopijoje padarytų pakeitimų, atlikite šiuos veiksmus:

 git checkout . 

Jei norite atšaukti indekso pakeitimus (t. Y. Pridėti), tai atlikite. Įspėjimas: iš naujo nustatykite visus nenustatytus įsipareigojimus įsisavinti! :

 git reset 

Jei norite grąžinti pakeitimą, atlikite šiuos veiksmus:

 git revert <commit 1> <commit 2> 

Jei norite ištrinti nepanaudotus failus (pvz., Naujus failus, generuotus failus):

 git clean -f 

Arba nenaudojami katalogai (pvz., Nauji arba automatiškai sukurti katalogai):

 git clean -fd 
2482
18 июля '09 в 10:57 2009-07-18 10:57 atsakymas duotas 1800 INFORMACIJA Liepos 18 d., 09:57 2009-07-18 10:57

Pastaba Taip pat galite paleisti

 git clean -fd 

a

 git reset --hard 

nepašalins nereikalingų failų, kur git -clean pašalins visus stebimus šakninio katalogo failus, kurie nėra git atsekami. ĮSPĖJIMAS - ATSARGIAI! Pirmiausia naudinga paleisti sausą paleistį, kad pamatytumėte, kas bus ištrinta.

border=0

Tai ypač naudinga, kai gaunate klaidos pranešimą.

 ~"performing this command will cause an un-tracked file to be overwritten" 

Kas gali atsitikti, kai atliekate kelis veiksmus, kai atnaujinate darbo kopiją, kai jūs ir jūsų draugas pridėjote naują tą patį pavadinimą turinčią failą, bet pirmiausia jis jį perkėlė į pradinę kontrolę ir jums nereikia ištrinti paruoštos kopijos.

Esant tokiai situacijai, paleisdami sausą paleidimą taip pat galėsite parodyti failų, kurie bus perrašyti, sąrašą.

309
20 июля '09 в 8:37 2009-07-20 08:37 Atsakymą duoda Antony Stubbs liepos 20 d., 09:37 08-07-20 08:37

Pažvelkite į git -flog. Jis išvardys visas valstybes, kurias jis prisimena (pagal nutylėjimą 30 dienų), ir jūs galite tiesiog patikrinti norimą. Pavyzdžiui:

 $ 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 bcde; 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 
44
19 июля '09 в 15:16 2009-07-19 15:16 atsakymą pateikė Williamas Pursellas liepos 19 d., 09:15 , 15:16 2009-07-19 15:16

Jei norite grąžinti visus pakeitimus ir atnaujinti su dabartiniu nuotoliniu valdikliu (pvz., Pamatysite, kad pirmaujanti HEAD buvo perkelta į priekį, nes jūs jį atskyrėte ir „push“ yra „atmestas“), galite naudoti

 git fetch # will fetch the latest changes on the remote git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down. 
39
22 апр. Michael Durrant atsakymas balandžio 22 d 2015-04-22 23:48 '15, 11:48 PM 2015-04-22 23:48

Perskaitęs daugybę atsakymų ir bandydamas juos atrasti įvairius regioninius atvejus, kurie kartais reiškia, kad jie visiškai neišvalo darbo kopijos.

Čia yra mano dabartinis bash scenarijus, kuris veikia visą laiką.

 #!/bin/sh git reset --hard git clean -f -d git checkout -- HEAD 

Paleiskite iš darbo kopijos šaknų katalogo.

30
04 июня '14 в 10:25 2014-06-04 10:25 atsakymą pateikė Scott Davey birželio 14 d. 14 d. 10:25 2014-06-04 10:25

PAVOJUS ATVEJU: (perskaitykite komentarus. Vykdydami mano atsakyme siūlomą komandą, galite pašalinti daugiau nei norite)

visiškai pašalinti visus failus, įskaitant katalogus, kuriuos turėjau paleisti

 git clean -f -d 
30
11 сент. Atsakymą pateikė Tobias Gassmann 11 sep. 2013-09-11 10:10 '13, 10:10 am 2013-09-11 10:10

Turėjau panašią problemą. Sprendimas yra naudoti „ git log kad sužinotumėte, kokia vietinio įsipareigojimo versija skiriasi nuo nuotolinio. (Pavyzdžiui, 3c74a11530697214cbcc4b7b98bf7a65952a34ec versija).

Tada naudokite git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec , kad pakeistumėte pakeitimą.

25
28 авг. Atsakymas pateikiamas Patrick 28 rug. 2013-08-28 10:34 '13, 10:34 am 2013-08-28 10:34

tiesiog pasakyti

 git stash 

jis pašalins visus vietinius veiksmus. ir jūs taip pat galite naudoti vėliau, sakydami

 git stash apply 
20
24 апр. atsakymas, kurį pateikė piyushmandovra balandžio 24 d 2015-04-24 15:18 '15, 15:18, 2015-04-24 15:18

Re klonas

 GIT=$(git rev-parse --show-toplevel) cd $GIT/.. rm -rf $GIT git clone ... 
  • Pašalina vietinius, nespaustus įsipareigojimus
  • Atšaukia stebimų failų pakeitimus.
  • Atkuria ištrintus failus.
  • Pašalina .gitignore (pvz., .gitignore failus) failus / katalogus
  • Pašalina failus, kurie nėra stebimi, o ne .gitignore
  • Forget Nepamirškite šio požiūrio
  • Waste juostos pločio atliekos

Žemiau pateikiamos kitos komandos, kurias pamiršiu kasdien.

Išvalyti ir iš naujo nustatyti

 git clean -f -d -x git reset --hard 
  • NEGALIMA ištrinti vietinių, nespaustų įsipareigojimų.
  • Atšaukia stebimų failų pakeitimus.
  • Atkuria ištrintus failus.
  • Pašalina .gitignore (pvz., .gitignore failus) failus / katalogus
  • Pašalina failus, kurie nėra stebimi, o ne .gitignore

Švarus

 git clean -f -d -x 
  • NEGALIMA ištrinti vietinių, nespaustų įsipareigojimų.
  • ES NESUTEIKIA stebimų failų pakeitimų.
  • NOT NEGALIMA atstatyti ištrintus failus.
  • Pašalina .gitignore (pvz., .gitignore failus) failus / katalogus
  • Pašalina failus, kurie nėra stebimi, o ne .gitignore

Atstatyti

 git reset --hard 
  • NEGALIMA ištrinti vietinių, nespaustų įsipareigojimų.
  • Atšaukia stebimų failų pakeitimus.
  • Atkuria ištrintus failus.
  • Pašalina .gitignore (pvz., .gitignore failus) failus / katalogus
  • NOT NEGALIMA neištrinti failų / katalogų, kurie nėra stebimi, o ne .gitignore

Pastabos

Bandymo pavyzdys, patvirtinantis aukščiau pateiktą informaciją (naudokite bash arba sh):

 mkdir project cd project git init echo '*.built' > .gitignore echo 'CODE' > a.sourceCode mkdir b echo 'CODE' > b/b.sourceCode cp -rbc git add . git commit -m 'Initial checkin' echo 'NEW FEATURE' >> a.sourceCode cp a.sourceCode a.built rm -rf c echo 'CODE' > 'd.sourceCode' 

Taip pat žr

  • git revert naujus įsipareigojimus, kurie panaikins ankstesnius įsipareigojimus
  • git checkout norite grįžti į ankstesnius įsipareigojimus laiku (jums gali tekti atlikti pirmiau nurodytas komandas)
  • git stash yra toks pat, kaip ir git reset , bet galite jį atšaukti
12
20 марта '17 в 15:37 2017-03-20 15:37 atsakymas pateikiamas pilnas padorumas kovo 20 d. 17, 15:37 2017-03-20 15:37

Jums gali prireikti / nereikia gauti jūsų darbo / failų į savo darbo katalogą, bet tiesiog atsikratyti jų visiškai. git clean komanda tai padarys jūsų git clean .

Kai kurie dažniausiai naudojami, jei norite ištrinti susijungimų ar išorinių įrankių sukurtą kreidą arba ištrinti kitus failus, kad galėtumėte paleisti švarų kūrinį.

Turėkite omenyje, kad jums bus labai atsargūs su šia komanda, nes ji skirta ištrinti failus iš vietinio darbo katalogo, kurie negali būti. jei po to, kai vykdote šią komandą, esate beprotiškas, nėra grįžta į ištrintų failų turinį. Saugesnė alternatyva yra atlikti

git stash --all

kuri pašalins viską, išskyrus viską, kas yra jūsų piniginėje. Tada ši talpykla gali būti naudojama.

Tačiau, jei tikrai norite ištrinti visus failus ir išvalyti darbo katalogą, turite įvykdyti

git clean -f -d

Taip bus ištrinti visi failai, taip pat bet kokie subkatalogai, kurių komandoje nėra elementų. Prieš vykdydami komandą git clean -f -d , turėtumėte atlikti protingą užduotį:

 git clean -f -d -n 

kuri parodys, kas bus pašalinta po to, kai git clean -f -d

Taigi čia yra jūsų pasirinkimų santrauka nuo agresyviausių iki mažiausiai agresyvių.


1 parinktis : ištrinkite visus failus vietoje (agresyviai)

 git clean -f -d 

2 variantas : peržiūrėkite pirmiau minėtą poveikį (žiūrėkite agresyviausią)

 git clean -f -d -n 

3 parinktis : slėpti visus failus (mažiausiai agresyvius)

 `git stash --all` 
3
15 июня '16 в 1:31 2016-06-15 01:31 Atsakymą davė Joey Stallmeyer birželio 16 d. 16 d. 1:31 2016-06-15 01:31

Pabandykite tai, kad vietos pakeitimai būtų neaktyvūs.

 $ git reset --hard HEAD 

Bet jei matote šią klaidą:

 fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists. 

Galite pereiti į aplanką „.git“ ir ištrinti „index.lock“ failą:

 $ cd /directory/for/your/project/.git/ $ rm index.lock 

Norėdami baigti, paleiskite komandą dar kartą:

 $ git reset --hard HEAD 
2
03 янв. Atsakyti Janderson Silva 03 Jan 2017-01-03 15:49 '17 at 15:49 2017-01-03 15:49

Ieškojau panašios problemos,

Būtina išmesti vietinius įsipareigojimus:

  • klonuotas saugykla (gito klonas)
  • perjungia į dev filialą (git checkout dev)
  • padarė kelis įsipareigojimus (git įsipareigojimas -m „įsipareigoti 1“)
  • tačiau nusprendė išmesti šiuos vietinius įsipareigojimus grįžti į nuotolinį (kilmę / dev)

Taigi:

 git reset --hard origin/dev 

Patikrinkite:

 git status On branch dev Your branch is up-to-date with 'origin/dev'. nothing to commit, working tree clean 

dabar vietiniai įsipareigojimai prarandami, vėl į pirmąją klonuotą valstybę, pirmiau 1 punkte.

2
25 февр. Atsakymą pateikė Manohar Reddy Poreddy 25 vasaris. 2017-02-25 13:03 '17, 13:03 2017-02-25 13:03

Kiti klausimai apie „ žymes arba užduoti klausimą