Kako s Gitom: Poništavanje počinjenja

Ponekad možete počiniti promjene na vašem Git repo-u, ali tada shvatite da ste pogriješili. Sada želite poništiti te obveze da bi ponovo započeo rad vašeg koda.

U ovom ćemo priručniku pogledati naredbu za resetiranje gita za lokalne i udaljene predaje u spremište.

Razlika između resetiranja gita i povratka gita

Važno je razumjeti razliku između resetiranja i poništavanja obveza prilikom korištenja Gita.

  • Naredba za resetiranje gita poništava uklanjanjem prethodnih stavki iz spremišta i vraćanjem Git HEAD na ranije izvođenje. Ako se to učini, može se izgubiti neka Git povijest, ovisno o tome koja se opcija koristi.
  • Naredba za vraćanje gita poništava počinjanje stvaranjem nove obveze koja predstavlja ranije stanje spremišta. Time se neće izgubiti nijedna Git povijest.

Već ste gurnuli promjene, a netko drugi je povukao te promjene? Ne biste trebali upotrijebiti git resetiranje za poništavanje promjena, umjesto toga biste trebali upotrijebiti vraćanje gita kako je opisano u našem vodiču za vraćanje gita o vraćanju..

Korištenje naredbe za resetiranje gita za poništavanje obveze

Za sljedeće primjere pretpostavimo da naše lokalno Git stablo izgleda ovako:

1
2
3

    x

    |

A-B-C

x predstavlja našu lokalnu, neobjavljenu promjenu na Git HEAD-u, naznačenu sa C.

Poništavanje obveze pod nazivom “C “Zbog pogreške možemo pokrenuti naredbu za resetiranje gita.

Ovisno o potrebama praćenja datoteka, morat ćete upotrijebiti naredbu za resetiranje gita s različitim zastavama.

Slučaj 1: Koristite resetiranje gita i uklanjanje datoteka s područja insceniranja

Pomoću naredbe git reflog možemo koristiti našu Git povijest.

Možemo upotrijebiti git ls-datoteke da bismo vidjeli trenutno inscenirane datoteke za naš projekt:

1
2
3
4
5
6
7
8
9
10

$ Git reflog

f326d13 GLAVA @ {0}: počiniti: Dodano C

358d535 GLAVA @ {1}: počinite: Dodano B

00b61d5 GLAVA @ {2}: počiniti (početno): Dodano A

 

$ Git ls-datoteke

B
C
x

Da biste zadržali sve praćene datoteke od počinjenja C, ali uklonite ih iz Git indeksa, možete pokrenuti:

1 Git resetira HEAD ~ 1

Možete koristiti Git kraticu od HEAD ~ 1 da biste uklonili počinjenje prije početka rada.

Ako ste koristili HEAD ~ 5, ovo će ukloniti počinitelj koji je pet obveza prije HEAD.

Promjene u Git indeksu, koji se nazivaju i “zaljevsko područje”, bit će izgubljeni, tako da će Git stablo sada biti:

1
2
3

  x

  |

A-B

Što možemo potvrditi ovim naredbama:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

$ Git reflog

358d535 GLAVA @ {0}: resetiranje: prelazak na GLAVU ~ 1

f326d13 GLAVA @ {1}: počinite: Dodano C

358d535 GLAVA @ {2}: počiniti: Dodano B

00b61d5 GLAVA @ {3}: počiniti (početno): Dodano A

 

$ Git ls-datoteke

B
 

$ Git status

Na majstoru grana

Nepotvrđene datoteke:

  (koristiti "Git add …" uključiti u ono što će se počiniti)

 

        C

        x

 

Kada samo koristimo resetiranje gita bez zastava, ne uklanjamo nijednu datoteku; oni su samo ne-inscenirani:

1
2

$ ls

A B C x

Ipak na kraju uklonite unos u zapisnik zbog obveze koju ste resetirali:

1
2
3
4
5
6
7
8
9
10
11
12

$ Git zapisnik

počini 358d535bc5e06730e61d272be34a6d0e568f42af

Autor: Korisnik < [email protected]>

Datum: Utorak 10. veljače 13:54:55 2015. -0500

 

    Dodano B

 

počiniti 00b61d53fe06ee672fa0497b175fb7bd89e26b72

Autor: Korisnik < [email protected]>

Datum: Utorak 10. veljače 13:54:55 2015. -0500

 

    Dodano A

Slučaj 2: Koristite git resetiranje – softver i sačuvajte promjene u datotekama

Ako koristite zastavicu softvera, sve promjene praćenih datoteka i Git indeksa su sačuvane:

1 Git resetiranje –soft HEAD ~ 1

Sve postavljene datoteke ostaju takve, a nijedna datoteka fizički se ne uklanja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

$ Git ls-datoteke

B
C
x
 

$ ls

A B C x

 

$ Git status

Na majstoru grana

Promjene koje treba počiniti:

  (koristiti "Git resetira HEAD …" do nestabilnosti)

 

        nova datoteka: C

        nova datoteka: X

Pomoću softverske zastave, i dalje uklanjate unos u zapisnik zbog obnove koji ste resetirali.

Slučaj 2: Koristite resetiranje gita -hard i Uklonite sve promjene datoteka

Ako koristite oznaku –hard, sve promjene u praćenim datotekama i Git indeksu se gube:

1
2

$ Git resetirano – tvrda glava ~ 1

GLAVA je sada na 3bf1b55 Dodano B

Sve datoteke nakon što izvršite vraćanje stavke se poništavaju i fizički uklanjaju:

1
2
3
4
5
6
7
8
9
10

$ Git ls-datoteke

B
 

$ ls

A B

 

$ Git status

Na majstoru grana

nema što počiniti, radni direktorij čist

Ponovno uklanjate unos u Git zapisnik zbog obveze koju ste resetirali.

Pokušajte upotrijebiti vraćanje gita kada su narudžbe već pritisnute

Kao što je gore navedeno, ako ste već potaknuli promjene, a netko je povukao te promjene, ne biste trebali upotrijebiti git resetiranje za poništavanje promjena, umjesto toga upotrijebite git revert.

Međutim, ako doista želite, možete primijeniti iste korake kao u prethodnom odjeljku za brisanje nekih prethodnih Git obveza.

Nakon toga možete koristiti git push -f da biste koristili opciju sile. Opet, to se ne preporučuje, jer može stvoriti ozbiljne sukobe između različitih stanja skladišta drugih Git korisnika.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me