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

Radau šią svetainę, kurioje aprašoma, kaip atšaukti viską, ką darėte saugykloje.

Kai kurios komandos:

 git commit --amend # Change last commit git reset HEAD~1 --soft # Undo last commit 
16
15 дек. atsakymą pateikė gruodžio 15 d. Eugen Konkov . 2016-12-15 19:21 '16, 19:21 2016-12-15 19:21

Čia yra svetainė: Oh shit, git! ,

Čia yra daug receptų, kaip atšaukti daiktus. Kai kurie iš jų yra:

O šūdas, turiu pakeisti pranešimą į mano paskutinį mūšį!

 git commit --amend # follow prompts to change the commit message 

Oh shit, aš atsitiktinai kažką susidorojau su ja, turėjau būti visiškai naujame pramonėje!

 # Create a new branch from the current state of master git branch some-new-branch-name # Remove the commit from the master branch git reset HEAD~ --hard git checkout some-new-branch-name # Your commit lives in this branch now :) 
15
28 февр. atsakymą pateikė Eugen Konkov , vasario 28 d. 2018-02-28 11:34 '18 at 11:34 am 2018-28 28 11:34
 $ git reset --soft HEAD~1 

Atstatyti dabartinį HEAD filialą atgal į 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 panaikintų versijų pakeitimai bus išsaugoti. Atlikę komandą, pakeitimus rasite kaip nesusijusius vietinius pakeitimus darbo kopijoje.

 $ git reset --hard HEAD~1 

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ų.

14
26 окт. Joseph Mathew atsakymas, pateiktas spalio 26 d 2017-10-26 21:11 '17 21:11 2017-10-26 21:11

Galite atšaukti savo įsipareigojimus iš vietos saugyklos. Prašome sekti žemiau esantį scenarijų.

Žemiau esančiame paveiksle git checkout -b test filialą „testas“ (naudojant „Git git checkout -b test ) kaip vietinę būseną ir patikrinkite (naudojant git status komandą) vietinį skyrių, kuris neturi nieko išspręsti.

2019

„IntelliJ IDEA“ galite tiesiog atidaryti „Git“ saugyklos žurnalą paspausdami „ Alt“ + 9 , dešiniuoju pelės klavišu spustelėję žymę iš įsipareigojimų sąrašo ir pasirinkite: „Atstatyti dabartinį filialą į ...“.

14
20 июня '17 в 13:05 2017-06-20 13:05 atsakymas pateikiamas Krzysztofui Walczewskiui birželio 20, 17 d. 13:05 2017-06-20 13:05

GALVA:

Prieš perkraunant, turime žinoti apie HEAD ... HEAD - tai ne tik jūsų dabartinė būsena jūsų darbo kataloge. Jai atstovauja fiksavimo numeris.

„Git“:

Kiekvienas pakeitimas yra priskirtas pagal įsipareigojimą, kurį vaizduoja unikali žyma. Pabaigos negalima ištrinti. Todėl, jei jums reikia paskutinio pataisymo, galite tiesiog pasinerti į jį git reset .

Galima nardyti į paskutinę komisiją dviem būdais:

1 metodas: (jei nežinote fiksavimo numerio, bet norite perkelti į pirmąjį)

 git reset HEAD~1 # It will move your head to last commit 

2 metodas: (jei žinote, kad įsipareigojimą, kurį tiesiog atkurėte savo žinomam įsipareigojimui)

git reset 0xab3 # Number git reset 0xab3

Pastaba: jei norite sužinoti neseniai įvykdytą įvykį, pabandykite git log -p -1

Čia yra grafinis vaizdas:

2019

Pašalinimas ir atšaukimas yra geriausias, kai norite, kad istorija būtų švari, kai siūlote pleistrus viešame skyriuje ir pan.

Jei jums reikia atstatyti viršutinį nustatymą, kitą eilutę

 git rebase --onto HEAD~1 HEAD 

Bet jei norite atstatyti 1 iš daugelio įsipareigojimų, jūs sakėte

a → b → c → d → kapitonas

ir jūs norite atsisakyti įvykdyti „c“

 git rebase --onto bc 

Tai sukurs „b“, nes naujoji bazė „d“ pašalina „c“

12
23 мая '18 в 2:52 2018-05-23 02:52 atsakymą Khemas pateikė gegužės 23 d. 18 val. 2:52 2018-05-23 02:52

Raskite naujausią įvykių maišą peržiūrėdami žurnalą:

 git log 

tada

 git reset <the previous co> 
12
03 июня '17 в 22:32 2017-06-03 22:32 atsakymą pristato Praveen Singh birželio 03 d. 17, 10:32 2017-06-03 22:32
16 нояб. Atsakymą pateikė Uchiha Itachi . 2016-11-16 00:07 '16 at 0:07 2016-11-16 00:07

Išsamumo sumetimais pateiksiu vieną akivaizdžiai akivaizdų metodą, kuris buvo praleistas iš ankstesnių atsakymų.

Kadangi taisymas nebuvo išsiųstas, konsolė nepasikeitė, todėl:

  1. Ištrinti vietinę saugyklą.
  2. Klonuoti nuotolinį saugyklą.

Kartais tai reikalinga, jei jūsų modernus „Git“ klientas atsisveikina. (pvz., klaidos non-fast-forward )

Nepamirškite vėl įrašyti išsaugotus pakeitimus nuo paskutinio paspaudimo.

11
28 июня '17 в 0:34 2017-06-28 00:34 atsakymą davė Dominic Cerisano birželio 28 d. 17 d. 0:34 2017-06-28 00:34

Skirtumas tarp git reset - sumaišytas, --soft ir --hard

Būtina sąlyga: kai atliekamas keitimas į esamą failą savo saugykloje, šis pakeitimas iš pradžių laikomas neapibrėžtu. Jei norite atlikti pakeitimus, turite jį parengti, o tai reiškia, kad jį pridedate prie indekso naudodami git add . Vykdant operaciją, į indeksą įtraukiami pateikti failai.

Paimkime pavyzdį:

 - A - B - C (master) 

HEAD nurodo C ir indeksas atitinka C

--soft

  • Kai atliekame „ git reset --soft B , kad ištrintume „C“ ir nukreiptumėte pagrindinį / HEAD į B.
  • Master / HEAD dabar nukreips į B, bet indeksas vis dar keičiamas iš C.
  • Vykdant „ git status galite matyti failus, suskirstytus į „ C“ C, kaip etapinius .
  • git commit šiuo metu sukurs naują įvykį su tais pačiais pakeitimais, kaip ir C

- maišyti

  • Paleisti git reset --mixed B
  • Vykdydamas pagrindinį / HEAD bus rodomas į B, o indeksas taip pat pasikeis, kad atitiktų B, atsižvelgiant į naudojamą mišrią vėliavą.
  • Jei šiuo metu mes vykdome git įsipareigojimą, nieko neįvyks, nes indeksas atitinka HEAD .
  • Mes vis dar turime darbo katalogo pakeitimus, bet kadangi jie nėra rodyklėje, gito būsena parodo juos kaip nepagautus .
  • Norėdami juos ištaisyti, reikia git add ir tada pataisyti, kaip įprasta.

-

  • Paleisti git reset --hard B
  • Vykdant pagrindinį / HEAD nurodys B ir pakeis darbo katalogą
  • Į „C“ įtraukti pakeitimai ir visi neprisiimti pakeitimai bus ištrinti .
  • Darbinėje kopijoje esantys failai atitiks „B“, todėl bus prarasti visi pakeitimai, padaryti padarytais „C“, taip pat ir neprisiimti pakeitimai.

Tikiuosi, kad lyginant vėliavas, kurias galima naudoti su git reset komanda, kas nors naudos juos protingai. Susisiekite su jais, jei norite gauti daugiau informacijos1 ir nuoroda2

9
21 дек. Atsakymą pateikė Keshan Nageswaran . 2018-12-21 05:02 '18, 5:02 2018-12-21 05:02

Lengviausias būdas atšaukti paskutinį įvykį

 git reset HEAD^ 

Tai suteiks projekto būseną prieš įsipareigodami.

9
10 дек. Atsakymą pateikė Arun Karnawat . 2018-12-10 10:05 '18, 10:05

1 veiksmas: gite Git ded-id: - git log

2 veiksmas: naudokite „Git“ atstatymą: git reset --hard ded commit-id

3 veiksmas: jei jau spustelėjote nuotolinio valdymo pulto pakeitimus, galite naudoti git push kad grąžintumėte nuotolinio valdymo pultą: git push origin branch-name -f

9
04 авг. Atsakyti Tom_cook Aug 04 2017-08-04 20:57 '17, 08:57 pm 2017-08-04 20:57

Jei norite pašalinti neteisingus failus, turite tai padaryti

git reset --soft <your_last_good_commit_hash_here> Čia, jei paleisite „ git status , matysite failus sustojimo zonoje. Galite pasirinkti netinkamus failus ir pašalinti juos iš sustojimo vietos.

Kaip ir toliau.

git reset wrongFile1 wrongFile2 wrongFile3

Dabar galite tiesiog pridėti failus, kuriuos reikia spustelėti,

git add goodFile1 goodFile2

juos padaryti

git commit -v arba git commit -am "Message"

ir stumti

git push origin master

Tačiau, jei nerūpi modifikuoti failai, galite iš naujo nustatyti ankstesnius gerus įsipareigojimus ir siųsti viską į serverį.

nuo

 git reset --hard <your_last_good_commit_hash_here> 

git push origin master

Jei jau paskelbėte neteisingus failus serveryje, galite naudoti serverį „ --force --force “ serveryje ir redaguoti istoriją.

git push --force origin master

8
17 марта '17 в 0:20 2017-03-17 00:20 atsakymas pateikiamas nPcomp kovo 17 d. 17 val. 0:20 2017-03-17 00:20

Pabandykite tai, iš naujo nustatydami ankstesnį taisymą, kur šie failai nebuvo įtraukti, ir tada:

 git reset --hard <commit_hash> 

Įsitikinkite, kad turite tik atsarginių pakeitimų kopiją, nes tai yra sunku atstatymas, o tai reiškia, kad jie bus prarasti (nebent prieš tai paslėpėte)

7
17 апр. atsakymas pateikiamas serdarsenay 17 d. 2018-04-17 18:41 '18, 18:41 pm 2018-04-17 18:41

Ką daryti kiekvieną kartą, kai reikia atšaukti įsipareigojimą / įvykdymą:

  1. git reset HEAD~<n> // neseniai įvykdytų įsipareigojimų, kuriuos reikia panaikinti, skaičius
  2. git status neprivaloma. Visi failai yra raudonai (ne stacionarūs).

  3. Dabar galiu pridėti ir taisyti tik tuos failus, kuriuos man reikia:

    • git add <file names> git commit -m "message" -m "details"
  4. Neprivaloma: galiu atšaukti kitų failų pakeitimus, jei reikia, ankstesnėje būsenoje, patvirtinant:
    • git checkout <filename>
  5. jei aš jau jį išstumiu į tolimą kilmę, anksčiau:
    • git push origin <branch name> -f // naudokite -f, norėdami paspausti.
6
16 сент. Atsakymą pateikė Theo Itzaris rugsėjo 16 d. 2018-09-16 11:36 '18, 11:36 ; 2018-09-16 11:36

Kadangi kai kuriuos dalykus išlaikėte savo filiale, įsipareigojimo ID galima rasti, jei įvedate:

$ git žurnalas

Atkreipkite dėmesį į ankstesnį savo įsipareigojimo ID ir atlikite minkštą atstatymą.

Tarkime, kad jūsų įsipareigojimo identifikatorius yra „C2“, o ankstesnis įsipareigojimo identifikatorius yra „C1“, tada iš naujo nustatykite $ git C1

Nė vienas HEAD nenurodo C1. C2 dabar yra nestacionarus.

Jei norite pašalinti savo filialo pakeitimus kartu su nestacionarumu, iš naujo nustatykite $ git --hard C1

5
24 нояб. Atsakymą pateikė SKM lapkričio 24 d. 2017-11-24 10:16 '17 at 10:16 2017-11-24 10:16

Jei norite atšaukti pirmą repo įrašą

Susidursite su šia problema:

 $ git reset HEAD~ fatal: ambiguous argument 'HEAD~': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' 

Klaida atsiranda, nes jei paskutinis įvykdymas yra originalas, įvykdomas (arba tėvų trūkumas) kapinyne, nėra HEAD ~.

Sprendimas

Jei norite atkurti tik „master“ filialo įsipareigojimą

 $ git update-ref -d HEAD $ git rm --cached -r . 
5
24 сент. Atsakymą pateikė Nicholas rugsėjo 24 d 2018-09-24 14:58 '18, 14:58 pm 2018-09-24 14:58

Iš mano atsakymo į kitą šio klausimo kopiją buvo pakartotinai paskelbta: Kaip atskleisti paskutinį savo įsipareigojimą „Git“

Jei norite išsaugoti pakeitimus iš įsipareigojimo, kurį norite atšaukti

 git reset --soft HEAD^ 

Jei norite anuliuoti pakeitimus iš įsipareigojimo, kurį norite atšaukti

 git reset --hard HEAD^ 

Taip pat galite pasakyti

 git reset --soft HEAD~2 

grąžinti du įsipareigojimus.

Kaip minėta „charsi“, jei esate „Windows“, turėsite įdėti HEAD arba suriuoti maišos kabelius.

 git reset --soft "HEAD^" git reset --soft "asdf" 
3
21 янв. Atsakymas, kurį pateikė Alex Kinnee Jan 21 2018-01-21 08:13 '18 8:13 201-01-21 08:13

Gaukite šią naujausią įsipareigojimo ID, naudodami šią komandą (tai yra paskutinis žurnale aukščiau):

 git log 

Gaukite įsipareigojimo ID (GUID) ir paleiskite šią komandą:

 git revert <commit_id> 
3
12 нояб. Atsakymą pateikė Nalan Madheswaran lapkričio 12 d. 2018-11-12 03:49 '18 at 3:49 201-11-11 03:49

Kaip redaguoti ankstesnį įvykį

Paprastai nenoriu atšaukti daugybės įsipareigojimų, o redaguoti ankstesnę žinią apie tai, kaip norėčiau, kad tai padarytų pirmiausia.

Radau, kad buvau fiksuojamas ankstesnis fiksavimas pakankamai dažnai, kad galėčiau parašyti scenarijų.

Čia yra darbo eiga:

  1.  git commit-edit <commit-hash> 

    Tai nuves jus į pataisymą, kurį norite redaguoti.

    Įsipareigojimų pakeitimai bus pašalinti , paruošti nustatyti, kaip norite, kad jis būtų pirmas kartas.

  2. Teisingai ir įsipareigokite, kaip norite, pirmiausia.

    (Galite naudoti git stash save --keep-index kad paleistumėte iš bet kurių failų, kurių jūs neįvykstate)

  3. Pakartokite veiksmus naudodami --amend , pavyzdžiui:

     git commit --amend 
  4. Atlikite atnaujinimą:

     git rebase --continue 

Skambinkite šiuo „ git-commit-edit ir įdėkite į savo „ $PATH :

27 сент. Atsakymą pateikė Tom Hale, rugsėjo 27 d 2018-09-27 16:12 '18, 4:12 pm 2018-09-27 16:12
 git revert commit 

Tai sukurs priešingą pakeitimą, palyginti su nustatymu, kurį norite grąžinti, ir tada tiesiog atlikite šiuos pakeitimus. Manau, kad tai yra paprasčiausias būdas.

https://git-scm.com/docs/git-revert

1
03 сент. atsakymą pateikė Gjorgi Gjorgiev 03 rugsėjis. 2018-09-03 16:19 '18, 18:19 PM 2018-09-03 16:19
 git reset --soft HEAD~1 // For soft delete git reset --hard HEAD~1 // Complete removal 

Lengvai valdydami galite naudoti nemokamą programą gitkraken .

1
15 янв. atsakymą Tijo Jonas davė sausio 15 d. 2018-01-15 16:07 '18, 16:07, 2018-01-15 16:07

Jei tiesiog norite pašalinti visus vietinius pakeitimus / įsipareigojimus ir padaryti savo vietinį filialą panašų į šakos šaką, su kuria pradėjote ...

git reset --hard origin/branch-name

1
29 нояб. JeremyWeir lapkričio 29 d. Atsakymas 2018-11-29 23:44 '18, 11:44 val. 2018-11-29 23:44

Jei norite atrakinti paskutinius pakeitimų pakeitimus:

 git reset --soft 

Visi paskutinio įvykio pakeitimai bus neištaisyti.

Dabar, jei norite ištrinti nereikalingus failus iš darbo medžio, galite naudoti

 git clean -f //use -d with -f if you want to process directories too 

Dabar galite atlikti pakeitimus ir dar kartą atlikti:

 git commit -m "removed unwanted files from last commit" 
1
18 дек. Atsakymą pateikė Vivek Maru 18 d. 2017-12-18 13:08 '17, 13:08 pm 2017-12-18 13:08

Git grįžta į senąjį įsipareigojimą

„Git Reset“ - grynasis grįžimas

Git push kilmės HEAD --force

0
09 июля '18 в 1:37 2018-07-09 01:37 Atsakymą davė JosephStar liepos 09 d. 18 val. 1:37. 2018-07-09 01:37

Jei norite atšaukti paskutinį įvykį, atlikite šiuos veiksmus:

1. git log: - gauti norimą atšaukti ID

2. git revert įsipareigojimų-id: - naudodami šią komandą galite atšaukti įsipareigojimą

arba

1. git reset --hard HEAD ~ 1: - naudokite šią funkciją iš naujo nustatyti, taip pat galite naudoti ded-id vietoj HEAD ~ 1

0
06 февр. Atsakymą pateikė Jitendra virani 06 Vas. 2018-02-06 08:31 '18, 8:31 am 2018-02-06 08:31

Mano pusėje aš naudoju „GitKraken“ ir tiesiog reikia spustelėti mygtuką „Undo / redo“ ...

0
20 янв. Atsakymą pateikė E.Racineux sausio 20 d. 2018-01-20 23:12 '18 at 11:12 pm 2018-01-20 23:12
 git push --delete (branch_name) //this will be removing the public version of your branch git push origin (branch_name) //This will add the previous version back 
0
18 мая '18 в 10:00 2018-05-18 10:00 atsakymas pateikiamas „ Omkaar.K“, gegužės 18 d., „18, 10:00 2018-05-18 10:00

Norėčiau tiesiog pridėti dar vieną pataisą, ištrindamas nereikalingus failus. Aš visada skvošas įsipareigoja prieš pateikdamas prašymus dėl potraukio, taigi poveikis bus toks pat, kaip niekada neįvykusio įžeidimo.

-2
11 окт. atsakymas suteiktas emory 11 oct. 2017-10-11 03:48 '17 at 3:48 2017-10-11 03:48

Kiti klausimai apie žymes arba užduoti klausimą