Kaip atšaukti paskutinius įsipareigojimus git?

Aš netyčia išsiųčiau neteisingus failus į „ Git“ , bet aš dar nesiunčiau įsipareigojimo serveriui.

Kaip galiu atšaukti šiuos įsipareigojimus iš vietos saugyklos?

18990
29 мая '09 в 21:09 2009-05-29 21:09 Hamza Yerlikaya paklausė 29 gegužės 09 d. 21:09 2009-05-29 21:09
@ 92 atsakymai

Yra du pagrindiniai scenarijai.

Jūs nespaudėte įsipareigojimo

Jei problema susijusi su papildomais failais, kuriuos --amend (ir nenorite jų naudoti saugykloje), galite juos ištrinti naudodami „ git rm ir tada - dar --amend su „ --amend

 git rm <pathToFile> 

Taip pat galite ištrinti visus katalogus -r arba netgi sujungti su kitomis bash komandomis.

 git rm -r <pathToDirectory> git rm $(find -name '*.class') 

Ištrinus failus, galite įsipareigoti naudodami parinktį --amend

 git commit --amend -C HEAD # the -C option is to use the same commit message 

Tai leis jums perrašyti neseniai įvykdytą vietinį įvykį, pašalinti nereikalingus failus, todėl šie failai niekada nebus siunčiami stumti ir bus ištrinti iš vietinio .git saugyklos per GC.

Jau spustelėjote įsipareigojimą

Tą patį sprendimą galite taikyti kitam scenarijui ir paleisti „ git push naudodami -f parinktį į -f , tačiau tai nerekomenduojama, nes ji perrašo ištrintą istoriją su skirtingais pakeitimais (tai gali pakenkti saugyklai).

Vietoj to, jūs privalote įsipareigoti be „ --amend (prisiminti šį pakeitimą): ši parinktis perrašo paskutinio įvykio istoriją.

111
12 сент. atsakymas yra dseminara 12 sep . 2014-09-12 17:51 '14, 17:51 2014-09-12 17:51

KAS NAUDOTI, reset --soft arba reset --hard ?

Aš tiesiog pridėjau du centus už „@Kyralessa“ atsakymą:

Jei nežinote, ką naudoti, eikite į --soft (naudoju šią konvenciją, kad prisimintumėte, kaip saugu).

Kodėl?

Jei --hard pasirinksite --hard , jūs neteksite savo pakeitimų, kaip buvo anksčiau. Jei --hard , galite pasiekti tuos pačius rezultatus - pasitelkdami papildomas komandas

border=0
 git reset HEAD file.html git checkout -- file.html 

Visas pavyzdys

 echo "some changes..." > file.html git add file.html git commit -m "wrong commit" # I need to reset git reset --hard HEAD~1 (cancel changes) # OR git reset --soft HEAD~1 # Back to staging git reset HEAD file.html # back to working directory git checkout -- file.html # cancel changes 

Kreditai eina į @ Kyralessa.

87
28 июля '16 в 10:24 2016-07-28 10:24 atsakymas duotas liepos 28 d. 16 val. 10:24 2016-07-28 10:24

Šiame straipsnyje yra puikus paaiškinimas , kaip pereiti prie skirtingų scenarijų (kai buvo atliktas nustatymas, ir taip pat paspauskite „AR“, kad įvykdytumėte prieš paspaudžiant):

http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html

Šiame straipsnyje paprasčiausia komanda , kurią matiau grąžinti ankstesnį įsipareigojimą su mano įsipareigojimo ID, buvo:

 git revert dd61ab32 
84
07 февр. atsakymas pateikiamas AmpT 07 vasario mėn . 2014-02-07 01:08 '14 at 1:08 2014-02-07 01:08

Jei norite ištrinti paskutiniame įvykyje esančius failus, galite tai naudoti:

 git reset --hard HEAD~1 

Ir jei jums reikia paskutinio įvykio failų, galite tai naudoti:

 git reset --soft HEAD~1 
83
10 янв. atsakymas duotas aya sausio 10 2017-01-10 15:12 '17 at 15:12 2017-01-10 15:12

Galite naudoti:

 git reset HEAD@{1} 

Ši komanda pašalins klaidingą elgesį be git žurnalo.

62
29 июня '16 в 9:28 2016-06-29 09:28 Atsakymą pateikė Jade Han birželio 29 d. 16 val. 9:28 2016-06-29 09:28

Manote, kad turime failą code.txt . Mes atliekame tam tikrus pakeitimus ir įsipareigojame. Mes galime atšaukti šią fiksaciją trimis būdais , bet pirmiausia turite žinoti, kas yra žingsnis po žingsnio ... Paprastas failas yra failas, kuris yra pasirengęs vykdyti, ir jei paleisite „ git status šis failas bus rodomas žaliai ir jei jis nebus nustatytas tvirtinimas bus rodomas raudonai:

2019

18 нояб. Ali Motameni atsakymas lapkričio 18 d 2016-11-18 11:57 '16 at 11:57 2016-11-18 11:57

Paprastai norite atšaukti pataisą, nes padarėte klaidą ir norite ją ištaisyti - iš esmės tai, ką OP padarė, kai jis uždavė klausimą. Taigi jūs tikrai norite ištaisyti pataisą.

Dauguma atsakymų čia yra sutelkti į komandų eilutę. Nors komandų eilutė yra geriausias būdas naudoti „Git“, kai esate patogus, tai tikriausiai šiek tiek svetima tiems, kurie ateina iš kitų „Git“ versijų valdymo sistemų.

Štai kaip tai padaryti naudojant grafinę sąsają. Jei įdiegėte „Git“, jau turite viską, ko reikia norint laikytis šių nurodymų.

PASTABA. Manau, kad jūs supratote, kad komisija buvo neteisinga prieš jį stumiant. Jei nežinote, kas yra stumiama, tikriausiai nepaspaudėte, todėl tęskite instrukcijas. Jei padarėte klaidingą pataisą, mažiausiai rizikingas būdas yra tiesiog stebėti klaidingą pataisą nauju pataisymu, kuris išsprendžia situaciją, kaip tai darote versijos valdymo sistemoje, kuri neleidžia perrašyti istorijos.

Vis dėlto, kaip išspręsti paskutinę klaidą, naudodami grafinę sąsają:

  1. Eikite į komandų eilutės saugyklą ir paleiskite gui su git gui
  2. Pasirinkite „Keisti paskutinį užbaigimą“. Pamatysite paskutinį pranešimą apie įvykdymą, pateiktus failus ir failus, kurių neturėjote.
  3. Dabar pakeiskite situaciją, kaip norite, kad jie atrodytų, ir spustelėkite „Nustatyti“.
57
18 нояб. atsakymą pateikė Carl Nov 2014-11-18 22:11 '14, 10:11 pm 2014-11-18 22:11

Jei dirbate su „ SourceTree“ , tai padės jums.

Dešiniuoju pelės mygtuku spustelėkite įvykdymą, tada pasirinkite „Atstatyti (dabartinė atšaka) / vedlį šiam įsipareigojimui“ ir paskutinį pasirinkimą „Minkštas“.

2019

Tiesiog atšaukite paskutinį įvykį:

 git reset --soft HEAD~ 

Arba atšaukite laiką iki šiol:

 git reset --soft HEAD~2 

Arba panaikinkite bet kurį ankstesnį įvykį:

 git reset --soft <commitID> 

(galite susitarti su git reflog )

Atšaukdami ankstesnę fiksaciją, nepamirškite valyti darbo vietos

 git clean 

Daugiau informacijos rasite dokumentuose: git-reset

52
08 мая '15 в 11:04 2015-05-08 11:04 atsakė į Steven gegužės 15 d., 15 val. 11:04 2015-05-08 11:04

Atšaukti paskutinį įsipareigojimą

Yra daug atvejų, kai tikrai norite atšaukti paskutinį savo kodą. Pavyzdžiui, nes norėtumėte ją pertvarkyti iš esmės - arba netgi visiškai atsisakyti!

Tokiais atvejais atstatymo komanda yra geriausias jūsų draugas:

 $ git reset --soft HEAD~1 

Pirmiau pateikta komanda (atstatyti) perkelia esamą HEAD filialą į nurodytą peržiūrą. Pirmiau pateiktame pavyzdyje norėtume grįžti į tą, kuris buvo iki dabartinės versijos - iš tikrųjų, kad mūsų paskutinis įsipareigojimas buvo atšauktas.

Atkreipkite dėmesį į --soft vėliavą: tai užtikrina, kad atšaukti pakeitimai --soft išsaugomi. Atlikę komandą, pakeitimus rasite kaip nesusijusius vietinius pakeitimus darbo kopijoje.

Jei nenorite išsaugoti šių pakeitimų, naudokite tik „ --hard vėliavą. Būtinai tai atlikite tik tada, kai esate tikri, kad jums nereikia šių pakeitimų.

 $ git reset --hard HEAD~1 

2019

14 сент. Atsakymas pateikiamas Mohit 14 rugsėjo. 2017-09-14 07:33 '17 ne 7:33 2017-09-14 07:33

Jei norite atšaukti vietinį įsipareigojimą, naudokite git reset <commit> . Taip pat ši pamoka yra labai naudinga norint parodyti jums, kaip ji veikia.

Arba galite naudoti „ git revert <commit> : grąžinti reikia naudoti, jei norite pridėti kitą įvykį, kuris sukelia pakeitimus (bet išsaugo juos projekto istorijoje).

47
04 янв. atsakymas pateikiamas mfathy00 04 sausis 2016-01-04 02:59 '16 at 2:59 2016-01-04 02:59

Tipinė git kilpa

Kalbėdamas apie Git susijusias komandas ankstesniuose atsakymuose, norėčiau pasidalinti savo tipiniais „Git“ ciklais su visais skaitytojais, kurie gali būti naudingi. Taip aš dirbu su gitu,

  1. Klonavimas pirmą kartą iš nuotolinio serverio

    git clone $project

  2. Ištraukimas iš nuotolinio valdymo pulto (kai neturiu laukiančio vietinio įsipareigojimo spustelėti)

    git pull

  3. Naujo vietinio failo1 įtraukimas į $ to_be_committed_list (tik įsivaizduokite, kad $ to_be_committed_list reiškia staged sritį)

    git add $file1

  4. Pašalinus klaidingai pridėtą failą2 iš $ to_be_committed_list (daroma prielaida, kad failas2 buvo pridėtas kaip 3 žingsnis, kurio aš nenorėjau)

    git reset $file2

  5. Įrašykite failą1, kuris yra $ to_be_committed_list

    git commit -m "commit message description"

  6. Prieš spustelėję sinchronizuokite vietinį įsipareigojimą su nuotoliniu saugykla

    git pull --rebase

  7. Konfliktų išankstinė konfigūracija atsiranda sprendžiant konfliktus.

    git mergetool #resolve merging here, also can manually merge

  8. Failų file1 į išspręstus konfliktus, pvz., file1 :

    git add $file1

  9. Mano ankstesnės pakartotinės komandos tęsimas

    git rebase --continue

  10. Paspaudus baigtą ir jau sinchronizuotą paskutinį vietinį įvykį

    git push origin head:refs/for/$branch # branch = master, dev, etc.

41
31 дек. Atsakymą pateikė Sazzad Hissain Khan gruodžio 31 d. 2015-12-31 17:34 '16 at 17:34 pm 2015-12-31 17:34

VISUALINIAI STUDIJŲ VARTOTOJAI (2015 m. Ir tt)

Jei negalite sinchronizuoti „Visual Studio“, nes jums neleidžiama spustelėti filialo kaip „kūrimo“, tada, kiek bandžiau, „ REVERT NOR RESET“ (kietas arba minkštas) niekada nedirbo „Visual Studio“.

Norėdami gauti atsakymą su TONE VOTES:

Naudokite tai savo projekto šaknies komandinėje eilutėje, kad sunaikintumėte viską, kas bandys spustelėti:

 git reset --hard HEAD~1 

Atsarginių kopijų arba zip failų, jei nenorite prarasti savo darbo ir tt

38
27 апр. Atsakymą pateikė Tom Stickel balandžio 27 d 2016-04-27 00:35 '16 at 0:35 2016-04-27 00:35

Mano atveju aš padariau ir spustelėjau neteisingą filialą, todėl norėjau, kad visi mano pakeitimai būtų grąžinti, kad galėčiau perkelti juos į naują teisingą filialą, todėl aš tai padariau:

Toje pačioje temoje, kurią padarėte ir paspaudėte, jei įvedate „git status“, nematote nieko naujo, nes jį padarėte ir spustelėjote, dabar įveskite:

git reset --soft HEAD~1

Tai grąžins visus pakeitimus (failus) atgal į scenos sritį, kad galėtumėte juos grąžinti į darbo katalogą (ne statinį), kurį paprasčiausiai įveskite:

 git reset FILE 

Kur „Failas“ yra failas, kurį norite padaryti dar kartą. Dabar šis failas turi būti darbo kataloge (nestacionarus) su visais atliktais pakeitimais. Dabar galite pereiti į bet kurį norimą filialą ir padaryti pakeitimus šiam filialui. Tikiuosi, kad tai padės kitiems žmonėms padaryti tą pačią klaidą kaip ir aš. Žinoma, pradinis filialas, kurį padarėte, vis dar egzistuoja su visais pakeitimais, bet mano atveju tai buvo normalu, jei ne jums, galite ieškoti būdų, kaip grąžinti šį pranešimą į šią temą.

37
11 авг. atsakymas suteiktas FraK 11 rug . 2015-08-11 17:11 '15 , 17:11 2015-08-11 17:11

Gavau pataisymo ID iš bitbucket ir tada padariau:

 git checkout commitID . 

Pavyzdys:

 git checkout 7991072 . 

Ir jis grįžo prie šio šio pranešimo darbo kopijos.

35
16 марта '16 в 18:41 2016-03-16 18:41 Atsakymą pateikė „ ioopl “ kovo 16 d. 16:41 2016-03-16 18:41

Tarkime, kad padarote klaidą vietoje ir vilkite jį į nuotolinę saugyklą. Galite atšaukti netvarą naudodami šias dvi komandas:

Pirma, turime nustatyti vietinę saugyklą, grįždami į norimą komandą:

 git reset --hard <previous good commit id where you want the local repository to go> 

Dabar šią komandą primygtinai stumiamės, naudodami šią komandą:

 git push --force-with-lease 

„Išnuomotas“ galios pasirinkimas neleis atsitiktinai ištrinti naujus įsipareigojimus, apie kuriuos nežinote (t. Y. Iš kito šaltinio nuo paskutinio ištraukimo).

34
07 мая '17 в 4:01 2017-05-07 04:01 atsakymas pateikiamas KawaiKx 07 gegužės 17 d. 4:01 2017-05-07 04:01

Jums reikia padaryti jį paprastą ir greitą.

  git commit --amend 

jei tai yra privatus filialas arba

  git commit -m 'Replace .class files with .java files' 

jei tai yra viešoji ar viešoji įstaiga.

32
25 мая '15 в 0:09 2015-05-25 00:09 „ Hefo Hef“ atsakymą pateikė gegužės 25 d. 15 d. 0:09 2015-05-25 00:09

Atšaukti paskutinį įvykį:

 git reset --soft HEAD^ or git reset --soft HEAD~ 

Taip bus atšauktas paskutinis įvykis.

Čia - --soft reiškia iš naujo nustatyti nustatymus.

HEAD~ or HEAD^ reiškia, kad bus nukreipta į HEAD.

Pakeiskite paskutinį įvykį nauju:

 git commit --amend -m "message" 

Jis pakeis paskutinį įvykį nauju fiksatoriumi.

30
15 февр. atsakymas pateikiamas ankit patidar 15 Feb. 2018-02-15 10:08 '18, 10:08 2018-02-15 10:08

Jūs turite keletą galimybių atšaukti paskutinį įvykį. Štai keletas jūsų parinkčių, kaip apibendrinti vienu atsakymu su kodo fragmentais.

Visų pirma turite nustatyti, kokias „neteisingas“ fiksacijas norite atsisakyti. Mes git reflog .


git reflog

Visada galite naudoti „ reflog .
git reflog parodys bet kokius pakeitimus, kurie atnaujino HEAD ir teisingo reflogo įrašo tikrinimas grąžins HEAD į šį pataisą.

Kiekvieną kartą pakeitus HEAD, naujas įrašas bus įvestas į reflog .
reflog funkcija reflog panaši į „unix history“ komandą ir yra saugoma jūsų kompiuteryje.

 git reflog git checkout HEAD@{...} # or git checkout <sha-1> 

Naudodamiesi kasininku, galite grįžti į bet kurią norimą fiksaciją, o jūs galite sukurti filialą ar bet kokius kitus parametrus, kuriuos galite atlikti.

2019

28 янв. Atsakymas duotas CodeWizard 28 sausis 2017-01-28 03:10 '17 at 3:10 2017-01-28 03:10

Naudokite šią komandą:

 git checkout -b old-state number_commit 
27
27 дек. Atsakymą pateikė Fadid 27 d. 2016-12-27 21:42 '17 21:42 2016-12-27 21:42

Naudokite šią komandą

 git checkout -b old-state 0d1d7fc32 
27
06 июля '15 в 11:30 2015-07-06 11:30 atsakymą pateikė Jishnu Sukumaran liepos 06 d. 15 val. 11:30 2015-07-06 11:30

Visada galite paleisti ankstesnės versijos „ git checkout <SHA code> ir dar kartą pataisyti naują kodą.

25
10 дек. Atsakymas pateikiamas shreshta bm 10 Dec. 2015-12-10 10:17 '15, 10:17 2015-12-10 10:17

Pašalinkite klaidą, kuri jau buvo perkelta į „Github“

 git push origin +(previous good commit id):(branch name) 

Nurodykite paskutinį gerą fiksavimo ID, kurį norėtumėte grįžti į „Github“.

Pavyzdžiui. Jei paskutinis įsipareigojimo identifikatorius yra neteisingas, nurodykite ankstesnį įsipareigojimo identifikatorių pirmiau esančiame git komandoje su filialo pavadinimu.

Ankstesnį įsipareigojimo ID galite gauti naudodami git log

25
04 дек. Atsakymas pateikiamas VV gruodžio 4 d. 2015-12-04 20:20 '15 ne 20:20 2015-12-04 20:20

Norėdami atsikratyti paskutinių įvykių (visų pakeitimų), paskutiniai 2 įvykdo ir paskutinis n įsipareigoja:

 git reset --hard HEAD~1 git reset --hard HEAD~2 ... git reset --hard HEAD~n 

Ir atsikratyti kažko po konkretaus įsipareigojimo:

 git reset --hard <commit sha> 

Pavyzdžiui

 git reset --hard 0d12345 

PS:
1. Būkite atsargūs, nes „sunkus“ variantas taip pat pašalina vietos repo pakeitimus ir grįžta prie ankstesnio įsipareigojimo. Turėtumėte paleisti šią funkciją, jei esate tikri, kad nesusiję su naujausiais įrašais ir norite grįžti laiku.

2 Paprastai pakanka 7 įvykių, bet dideliuose projektuose jums gali prireikti iki 12 raidžių, kad būtų užtikrintas unikalumas. Taip pat galite paminėti visas 40 raides.

3 - Pirmiau minėtos komandos veikia „Github for Windows“.

24
06 нояб. atsakymas Alisa lapkričio 06 d 2016-11-06 06:38 '16 at 6:38 am 2016-11-06 06:38

Jums tereikia naudoti vieną komandą:

 git reset --soft 'HEAD^' 

Jis veikia, norėdamas atšaukti naujausią vietinį įsipareigojimą savo git saugykloje.

23
27 дек. atsakymas pateikiamas 27 d. 2016-12-27 09:36 '17 at 9:36 am 2016-12-27 09:36

Naudoti:

 git reset HEAD~1 --soft 

Atlikite pakeitimus, pridėkite ir atlikite pakeitimus.

23
28 февр. Alex Wilson atsakymas vasario 28 d 2017-02-28 18:32 '17 at 18:32 2017-02-28 18:32

Galite atšaukti savo „Git“ įsipareigojimus dviem būdais: pirma, galite naudoti „ git revert jei norite išsaugoti įsipareigojimo istoriją:

 git revert HEAD~3 git revert <hashcode of commit> 

Antra, galite naudoti „ git reset , kuri ištrins visą jūsų fiksavimo istoriją ir nukreips galvą į fiksaciją, kur norite.

 git reset <hashcode of commit> git reset HEAD~3 

Taip pat galite naudoti --hard raktinį žodį, jei bet kuris iš jų pradeda elgtis kitaip. Bet norėčiau rekomenduoti, kol tai bus absoliučiai būtina.

20
02 авг. atsakymas duotas Shwetank 02 rug . 2017-08-02 11:58 '17 at 11:58 2017-08-02 11:58

Nuo atšaukimo paskutinio įsipareigojimo, kurį norite grįžti į senąjį įvykį.

Eikite į terminalą ir įveskite šias komandas:

 git reset --hard hash-to-reverted git push origin HEAD --force 

Tam jums reikia maišos.

18
27 мая '17 в 13:56 2017-05-27 13:56 atsakymą davė user7950465 gegužės 27 d. 17:56. 00-27 13:56

Nuoroda: Kaip atšaukti paskutinį įsipareigojimą git?

Jei įdiegėte „Git Extensions“, galite lengvai atšaukti / atrakinti (čia galite atsisiųsti „GIT“ plėtinius).

Atidarykite „Git Extensions“, dešiniuoju pelės mygtuku spustelėkite norimą grąžinti įsipareigojimą, tada pasirinkite „Atšaukti įsipareigojimą“.

2019

30 марта '17 в 23:56 2017-03-30 23:56 atsakymas į Ranadheer Reddy pateikiamas kovo 17 d. 17 val. 23:56 2017-03-30 23:56

Naudokite git reset --hard <last good SHA> kad nustatytumėte pakeitimus ir atliktumėte naują įsipareigojimą. Taip pat galite naudoti „ git checkout -- <bad filename> .

16
29 мая '16 в 17:21 2016-05-29 17:21 atsakymas į „ Hubot“ gegužės 16 d., 16 d., 17:21

Kiti klausimai apie žymes arba užduoti klausimą