Hur man gör med Git: Ångra åtagande

Ibland kan du göra ändringar i din Git-repo, men då inser du att du gjorde ett misstag. Nu vill du ångra dessa åtaganden för att få din kod att fungera igen.


I den här guiden tittar vi på kommandot git-återställning för lokala och fjärråtgärder till ett arkiv.

Skillnad mellan en git-återställning och git-återställning

Det är viktigt att förstå skillnaden mellan att återställa kontra återställa åtaganden när du använder Git.

  • Git-återställningskommandot ångrar åtaganden genom att ta bort tidigare åtaganden från förvaret och återställa Git HEAD till ett tidigare åtagande. Vissa Git-historia kan gå förlorade genom att göra detta, beroende på vilket alternativ som används.
  • Git revert-kommandot ångrar åtaganden genom att skapa ett nytt engagemang som representerar ett tidigare tillstånd i förvaret. Ingen Git-historia kommer att gå förlorad genom att göra detta.

Har du redan drivit ändringar och någon annan drog ändringarna? Du bör inte använda git-återställning för att ångra ändringar, du bör använda git-återställning som beskrivs i vår Git rollback-åtagandeguide istället.

Använda git-återställningskommandot för att ångra ett åtagande

För följande exempel antar att vårt lokala Git-träd ser ut så här:

1
2
3
    X

|

A-B-C

De X representerar vår lokala, obefogade ändring av vår Git HEAD, indikerad av C.

Ångra åtagandet som heter “C ”På grund av ett misstag kan vi köra ett git reset-kommando.

Beroende på filspårningsbehov, vill du använda kommandot git-återställning med olika flaggor.

Fall 1: Använd git-återställning och ta bort filer från scenområdet

Vi kan använda git reflog-kommandot för att se vår Git-historik.

Vi kan använda git ls-filer för att se de för närvarande iscensatta filerna för vårt projekt:

1
2
3
4
5
6
7
8
9
10
$ Git-återloggning

f326d13 HEAD @ {0}: commit: Tillagd C

358d535 HEAD @ {1}: commit: Tillagd B

00b61d5 HEAD @ {2}: commit (initial): Tillagd A

$ Git ls-filer

EN
B
C
X

För att behålla spårade filer sedan begå C, men ta bort dem från Git-indexet, du kan köra:

1Git återställ HEAD ~ 1

Du kan använda Git-korthandelen till HEAD ~ 1 för att ta bort den engagemang som du begår före HEAD.

Om du använde HEAD ~ 5, detta skulle ta bort åtagandet som är fem åtaganden före HEAD.

Ändringar av Git-indexet, även kallad ”iscenesättningsområdet” kommer att gå förlorat, så Git-trädet skulle nu vara:

1
2
3
  X

|

A-B

Som vi kan bekräfta med dessa kommandon:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ Git-återloggning

358d535 HEAD @ {0}: reset: flyttar till HEAD ~ 1

f326d13 HEAD @ {1}: commit: Tillagd C

358d535 HEAD @ {2}: commit: Tillagd B

00b61d5 HEAD @ {3}: commit (initial): Tillagd A

$ Git ls-filer

EN
B

$ Git-status

På grenmästare

Ospårade filer:

(använda sig av “Git till …” att inkludera i vad som kommer att vara engagerat)

C

X

När vi bara använder git-återställning utan flaggor tar vi inte bort några filer; de är bara ostadierade:

1
2
$ ls

A B C X

Du tar dock bort loggposten för det åtagande du återställer, dock:

1
2
3
4
5
6
7
8
9
10
11
12
$ Git-logg

begå 358d535bc5e06730e61d272be34a6d0e568f42af

Författare: Användare < [email protected]>

Datum: di 10 feb 13:54:55 2015 -0500

Tillagd B

begå 00b61d53fe06ee672fa0497b175fb7bd89e26b72

Författare: Användare < [email protected]>

Datum: di 10 feb 13:54:55 2015 -0500

Tillagd A

Fall 2: Använd git reset –soft och bevara ändringar i filer

Om du använder –soft-flaggan bevaras alla ändringar av spårade filer och Git-index:

1Git återställning – soft HEAD ~ 1

Alla filer som iscensatt förblir så, och inga filer tas fysiskt bort:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ Git ls-filer

EN
B
C
X

$ ls

A B C X

$ Git-status

På grenmästare

Ändringar som begås:

(använda sig av “Git återställ HEAD …” till scenen)

ny fil: C

ny fil: X

Med hjälp av –softflaggan hamnar du fortfarande loggposten för det åtagande du återställer.

Fall 2: Använd git-återställning – hårt och ta bort alla ändringar i filer

Om du använder flaggan –hard förloras eventuella ändringar av spårade filer och Git-index:

1
2
$ Git återställning –hard HEAD ~ 1

HEAD är nu på 3bf1b55 Tillagd B

Alla filer efter åtagandet som du återställer till är ostadierade och tas bort fysiskt:

1
2
3
4
5
6
7
8
9
10
$ Git ls-filer

EN
B

$ ls

A B

$ Git-status

På grenmästare

inget att begå, arbetskatalogen ren

Du tar bort igen Git-loggposten för åtagandet som du återställer.

Försök att använda git revert när Commits redan är tryckt

Som nämnts ovan, om du redan har tryckt på dina ändringar och någon annan dragit in dessa ändringar, bör du inte använda git-återställning för att ångra ändringar, använd git-återställning istället.

Men om du verkligen vill, kan du använda samma steg som i föregående avsnitt för att radera några tidigare Git-åtaganden.

Efter det kan du göra en git push -f för att använda kraftalternativet. Återigen rekommenderas inte detta, eftersom det kan skapa allvarliga konflikter mellan olika Git-användares olika förvarstillstånd.

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