Git

Hvordan Squash Git forplikter

Hvordan Squash Git forplikter

Hvordan squash forplikter seg i Git for å holde historien ren

Når du jobber med Git, er det en god ide å forplikte seg ofte, slik at du alltid kan gå tilbake til tilstanden til koden hvis du ødelegger. Imidlertid er det ikke alltid en god idé å begå alle disse miniendringene i hovedgrenen. Det gjør historien rotete og vanskelig å følge.

Git gir en måte å klemme en mengde forpliktelser på ved hjelp av rebase-kommandoen. Når du har gjort endringene lokalt i en bestemt fil eller for en bestemt funksjon, kan du alltid bruke squashmetoden for å kombinere endringene før du forplikter deg til hovedgrenen. Dette vil hjelpe andre til å forstå endringene dine bedre.

Advarsel: Selv om du kan trekke fra eksterne lagre og squashforpliktelser sammen, er det en dårlig idé. Det kan skape konflikter og forvirring. Unngå å endre historikken som allerede er offentlig. Bare hold deg til squashing-forpliktelser som er lokale for arbeidet ditt.

La oss arbeide gjennom et eksempel.

Anta at vi har to filer a.py og b.py. La oss først gå gjennom prosessen med å lage filene og gjøre endringene:

$ mkdir mitt prosjekt
$ cd myproject /
$ git init
$ echo "print (" hallo A ")"> a.py
$ git add -A && git commit -m "Lagt til en.py "
$ echo "print (" hallo B ")"> b.py
$ git add -A && git commit -m "Lagt til b.py "
$ echo "print (" hallo BB ")"> b.py
$ git add -A && git commit -m "b.py Modifikasjon 1 "
$ echo "print (" hallo BBB ")"> b.py
$ git add -A && git commit -m "b.py Modifikasjon 2 "

Hvis vi sjekker historien om forpliktelser, vil vi se følgende:

$ git log --oneline --graph --decorate
* dfc0295 (HEAD -> master) b.py Modifikasjon 2
* ce9e582 b.py Modifikasjon 1
* 7a62538 Lagt til b.py
* 952244a Lagt til a.py

Når vi er ferdige med arbeidet vårt, bestemmer vi oss for å legge alle endringene til b.py i en enkelt forpliktelse for klarhet. Vi teller at det er 3 forpliktelser på b.py fra HODET. Vi utsteder følgende kommando:

git rebase -i HEAD ~ 3

Alternativet -i forteller Git å bruke den interaktive modusen.

Det skal dukke opp et vindu på Git-teksteditoren din:

plukk 7a62538 Lagt til b.py
velg ce9e582 b.py Modifikasjon 1
velg dfc0295 b.py Modifikasjon 2
 
# Rebase 952244a ... dfc0295 på 952244a (3 kommando (er))
#
# Kommandoer:
# p, pick = use commit
# r, reword = bruk commit, men rediger commit-meldingen
# e, rediger = bruk commit, men stopp for endring
# s, squash = bruk commit, men meld deg inn i tidligere commit
# f, fixup = som "squash", men kast denne forpliktelsens loggmelding
# x, exec = kjør kommando (resten av linjen) ved hjelp av shell
#
# Disse linjene kan bestilles på nytt; de blir henrettet fra topp til bunn.
#
# Hvis du fjerner en linje her SOM FORPLIKTELSEN MIST.
#
# Hvis du imidlertid fjerner alt, vil rebasen avbrytes.
#
# Merk at tomme forpliktelser kommenteres
~

Forpliktelsene er oppført kronologisk på toppen fra det tidligste til det siste. Du kan velge hvilken forpliktelse du skal velge og hvilken som forplikter seg til squash. For enkelhets skyld velger vi den første forpliktelsen og klemmer resten i den. Så vi vil endre teksten slik:

plukk 7a62538 Lagt til b.py
squash ce9e582 b.py Modifikasjon 1
squash dfc0295 b.py Modifikasjon 2
 
# Rebase 952244a ... dfc0295 på 952244a (3 kommando (er))
#
# Kommandoer:
# p, pick = bruk commit
# r, reword = bruk commit, men rediger commit-meldingen
# e, rediger = bruk commit, men stopp for endring
# s, squash = bruk commit, men meld deg inn i tidligere commit
# f, fixup = som "squash", men kast denne forpliktelsens loggmelding
# x, exec = kjør kommando (resten av linjen) ved hjelp av shell
#
# Disse linjene kan bestilles på nytt; de blir henrettet fra topp til bunn.
#
# Hvis du fjerner en linje her SOM FORPLIKTELSEN MIST.
#
# Hvis du imidlertid fjerner alt, vil rebasen avbrytes.
#
# Merk at tomme forpliktelser kommenteres

Så snart du lagrer og lukker tekstfilen, skal det dukke opp et annet tekstvindu som ser slik ut:

# Dette er en kombinasjon av tre forpliktelser.
# Den første kommisjonens melding er:
Lagt til b.py
 
# Dette er den andre meldingen:
 
b.py Modifikasjon 1
 
# Dette er den tredje meldingsmeldingen:
 
b.py Modifikasjon 2
 
# Vennligst skriv inn kommisjonsmeldingen for endringene dine. Linjer starter
# med '#' vil bli ignorert, og en tom melding avbryter forpliktelsen.
#
# Dato: Fredag ​​30. mars 21:09:43 2018 -0700
#
# rebase pågår; inn på 952244a
# Du redigerer for øyeblikket en forpliktelse mens du omgrener gren 'master' på '952244a'.
#
# Endringer som skal begås:
# Ny fil: b.py
#

Lagre og lukk også denne filen. Du bør se noe slikt:

$ git rebase -i HEAD ~ 3
[løsrevet HEAD 0798991] Lagt til b.py
Dato: Fredag ​​30. mars 21:09:43 2018 -0700
1 fil endret, 1 innsetting (+)
opprett modus 100644 b.py
Omdefinert og oppdatert ref / head / master.

Hvis du sjekker forpliktelsesloggen nå:

$ git log --oneline --graph - dekorere
* 0798991 (HEAD -> master) Lagt til b.py
* 952244a Lagt til a.py

Alle forpliktelser for b.py har blitt klemt i en kommisjon. Du kan bekrefte ved å se på b.py-fil:

$ katt b.py
utskrift ("hei BBB")

Den har innholdet i Modifikasjon 2.

Konklusjon

Rebasen er en kraftig kommando. Det kan hjelpe deg med å holde historikken ren. Men unngå å bruke den til allerede offentlige forpliktelser, da det kan forårsake konflikter og forvirring. Bruk den bare til ditt eget lokale arkiv.

Videre studier:

Mus Midterste museknapp fungerer ikke i Windows 10
Midterste museknapp fungerer ikke i Windows 10
De midtre museknapp hjelper deg med å bla gjennom lange websider og skjermer med mye data. Hvis det stopper, vil du ende opp med å bruke tastaturet ti...
Mus Hvordan endre venstre og høyre museknapp på Windows 10 PC
Hvordan endre venstre og høyre museknapp på Windows 10 PC
Det er ganske vanlig at alle datamusenheter er ergonomisk designet for høyrehendte brukere. Men det er tilgjengelige musenheter som er spesielt design...
Mus Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Bruk av mus eller tastatur i feil stilling for overdreven bruk kan føre til mange helseproblemer, inkludert belastning, karpaltunnelsyndrom og mer. I ...