Kaip atrakinti vietinį gitą

Mano problema yra ta, kad pakeitiau failą, pavyzdžiui: „README“, pridėjote naują eilutę „tai yra mano bandymo linijai“ ir išsaugojau failą, tada išleido šias komandas

  git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: README # no changes added to commit (use "git add" and/or "git commit -a") git add README git commit -a -m 'To add new line to readme' 

Aš nespausdavau kodo „github“, dabar noriu atšaukti šį įvykį.

Tam naudoju

  git reset --hard HEAD~1 

Bet praradau naujai pridėtą eilutę „tai yra mano bandymo linija“ iš README failo. Tai neturėtų būti. Man reikia, kad turinys būtų. Ar yra būdas išsaugoti turinį ir atšaukti savo vietinį įsipareigojimą?

560
31 янв. Amal Kumar S nustatė sausio 31 d 2011-01-31 15:14 '11, 15:14, 2011-01-31 15:14
@ 7 atsakymai

Tiesiog naudokite „ git reset be „ --hard vėliavos:

 git reset HEAD~1 

PS: „Unix“ sistemose galite naudoti HEAD^ , kuri yra HEAD~1 . „Windows“ sistemoje HEAD^ neveiks, nes ^ signalizuoja linijos tęstinumą. Taigi, ar jūsų komandų eilutė tiesiog prašo More? .

1085
31 янв. Atsakymas pateikiamas Koraktor sausio 31 d 2011-01-31 15:17 '11, 15:17, 2011-01-31 15:17

Naudokite --hard vietoj --hard flag:

border=0
 git reset --soft HEAD^ 
143
10 авг. Atsakymas pateikiamas TpED 10 rug . 2012-08-10 11:02 '12, 11:02 am 2012-08-10 11:02

Jei esate įvykio viduryje (t. Y. Jau redaktoriuje), galite jį atšaukti ištrindami visas eilutes virš pirmojo # . Taip bus nutrauktas įsipareigojimas.

Taigi, galite ištrinti visas eilutes, kad įsipareigojimo pranešimas būtų tuščias, tada išsaugokite failą:

2019

Gitui galite pasakyti, ką daryti su savo indeksu (rinkmenų rinkiniu, kuris taps sekančiu įvykiu), ir darbinį katalogą atlikdami gitų atkūrimą naudojant vieną iš parametrų:

--soft : tik bus --soft , ir indekso ir darbo katalogas nebus pakeistas.

--mixed : tai bus indeksas pagal antraštę, ir darbo katalogas nebus paveiktas. Visi pakeitimai liks darbo kataloge ir bus rodomi kaip modifikuoti.

--hard : atstato viską (įsipareigoja, indeksas, darbinis katalogas) pagal antraštę.

Jūsų atveju norėčiau naudoti git reset --soft kad išsaugotumėte modifikuotus indekso ir darbo katalogo pakeitimus. Būtinai patikrinkite šį išsamesnį paaiškinimą.

5
29 мая '18 в 13:22 2018-05-29 13:22 atsakymą pateikė „ Nesha Zoric “ gegužės 29 d. 18 val. 22:22. 2018-05-29 13:22

Pirmas dalykas, kurį reikia padaryti, yra išsiaiškinti, ar norite ištrinti vietinius pakeitimus prieš ištrindami įvykio pranešimą.

Naudokite „ git log norite parodyti dabartinius priskyrimo pranešimus, ir tada suraskite fail_id, kol norite ištrinti, o ne tik tą, kurį norite ištrinti.

Jei norite išsaugoti vietiniu būdu pakeistus failus, tiesiog ištrinkite įvykio pranešimą:

git reset --soft commit_id

Jei norite ištrinti visus vietiniu būdu pakeistus failus ir priskyrimo pranešimą:

git reset --hard commit_id

Koks skirtumas yra minkštas ir sunkus

2
02 сент. atsakymas suteiktas 02 sep . 2018-09-02 06:43 '18 at 6:43 2018-09-02 06:43

Naudokite toliau nurodytą komandą: $ git reset HEAD ~ 1 Po to taip pat galite peržiūrėti grąžintus failus, kaip parodyta žemiau.

Neapibrėžti pakeitimai po atstatymo: M application / config / config.php M application / config / database.php

1
14 мая '18 в 16:25 2018-05-14 16:25 atsakymas pateikiamas Omkar gegužės 14 d., 18 val., 16:25, 2018-05-14 16:25

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

0
18 янв. Atsakymą pateikė Keshan Nageswaran Jan 18 2019-01-18 19:48 '19, 07:48 pm 2019-01-18 19:48

Kiti klausimai apie žymes arba Užduoti klausimą