Git

Kako skvoštiti Git Commits

Kako skvoštiti Git Commits

Kako skvoširati predaje u Gitu kako bi vaša povijest bila čista

Kada radite s Gitom, dobra je ideja često se obvezati, pa se uvijek možete vratiti u stanje koda ako zabrljate. Međutim, predavanje svih tih mini-promjena glavnoj grani nije uvijek dobra ideja. Čini povijest neurednom i teškom za praćenje.

Git pruža način da zgnječite gomilu svojih predavanja pomoću naredbe rebase. Nakon što lokalno napravite promjene u određenoj datoteci ili za određenu značajku, uvijek možete upotrijebiti metodu squash da kombinirate promjene zajedno prije nego što se obvežete na glavnu granu. To će pomoći drugima da bolje razumiju vaše promjene.

Upozorenje: iako možete povući vanjske spremišta i skvoširati obveze, to je loša ideja. Može stvoriti sukobe i zbrku. Izbjegavajte mijenjanje povijesti koja je već javna. Držite se samo zgužvanih obveza koje su lokalne vašem poslu.

Poradimo na primjeru slučaja.

Pretpostavimo da imamo dvije datoteke a.py i b.py. Prvo prođimo kroz postupak stvaranja datoteka i izmjene:

$ mkdir mojprojekt
$ cd mojprojekt /
$ git init
$ echo "print (" hello A ")"> a.py
$ git add -A && git commit -m "Dodano a.pi "
$ echo "print (" hello B ")"> b.py
$ git add -A && git commit -m "Dodano b.pi "
$ echo "print (" hello BB ")"> b.py
$ git add -A && git commit -m "b.py Izmjena 1 "
$ echo "print (" hello BBB ")"> b.py
$ git add -A && git commit -m "b.py Izmjena 2 "

Ako provjerimo povijest obveza, vidjet ćemo sljedeće:

$ git log --oneline --graph --decorate
* dfc0295 (GLAVA -> master) b.py Modifikacija 2
* ce9e582 b.py Izmjena 1
* 7a62538 Dodano b.py
* 952244a Dodan a.py

Nakon što završimo sa svojim radom, odlučujemo staviti sve promjene u b.py u jedan predati radi jasnosti. Računamo da postoje 3 predavanja na b.py iz GLAVE. Izdajemo sljedeću naredbu:

git rebase -i GLAVA ~ 3

Opcija -i govori Gitu da koristi interaktivni način.

Trebao bi se pojaviti prozor na vašem Git editoru teksta:

pick 7a62538 Dodano b.py
odabrati ce9e582 b.py Izmjena 1
odaberite dfc0295 b.py Modifikacija 2
 
# Podmažite 952244a… dfc0295 na 952244a (3 naredbe)
#
# Naredbe:
# p, pick = koristi predavanje
# r, reword = koristi predavanje, ali uredite poruku urezivanja
# e, edit = koristi predavanje, ali zaustavite se radi izmjena
# s, squash = koristi predavanje, ali se uklapa u prethodni predaj
# f, fixup = poput "squash", ali odbacite poruku dnevnika ovog urezivanja
# x, exec = naredba pokreni (ostatak retka) pomoću ljuske
#
# Ove se crte mogu preurediti; izvršavaju se od vrha do dna.
#
# Ako ovdje uklonite redak, TA ĆE SE OBAVEZA IZGUBITI.
#
# Međutim, ako uklonite sve, ponovna baza podataka bit će prekinuta.
#
# Imajte na umu da se prazni komentari komentiraju
~

Obveze su kronološki navedene na vrhu od najranijih do najnovijih. Možete odabrati koju ćete obvezu "pokupiti", a koju zgnječiti. Radi jednostavnosti, odabrat ćemo prvi komad, a ostatak ugurati u njega. Tako ćemo tekst izmijeniti ovako:

pick 7a62538 Dodano b.py
tikvica ce9e582 b.py Izmjena 1
tikvica dfc0295 b.py Modifikacija 2
 
# Podmažite 952244a… dfc0295 na 952244a (3 naredbe)
#
# Naredbe:
# p, pick = koristi predavanje
# r, reword = koristi predavanje, ali uredite poruku urezivanja
# e, edit = koristi predavanje, ali zaustavite se radi izmjena
# s, squash = koristi predavanje, ali se uklapa u prethodni predaj
# f, fixup = poput "squash", ali odbacite poruku dnevnika ovog urezivanja
# x, exec = naredba pokreni (ostatak retka) pomoću ljuske
#
# Ove se crte mogu preurediti; izvršavaju se od vrha do dna.
#
# Ako ovdje uklonite redak, TA ĆE SE OBAVEZA IZGUBITI.
#
# Međutim, ako uklonite sve, ponovna baza podataka bit će prekinuta.
#
# Imajte na umu da se prazni komentari komentiraju

Čim spremite i zatvorite tekstualnu datoteku, trebao bi se pojaviti još jedan tekstualni prozor koji izgleda ovako:

# Ovo je kombinacija 3 urezivanja.
# Prva poruka urezivanja je:
Dodano b.py
 
# Ovo je druga poruka urezivanja:
 
b.py Izmjena 1
 
# Ovo je 3. poruka urezivanja:
 
b.py Modifikacija 2
 
# Unesite poruku urezivanja za vaše promjene. Linije počinju
# s '#' bit će zanemaren, a prazna poruka prekida urezivanje.
#
# Datum: petak 30. ožujka 21:09:43 2018 -0700
#
# ponovna baza podataka u tijeku; na 952244a
# Trenutno uređujete predavanje tijekom ponovnog postavljanja grane 'master' na '952244a'.
#
# Izmjene koje treba izvršiti:
# Nova datoteka: b.py
#

Spremite i zatvorite i ovu datoteku. Trebali biste vidjeti nešto poput ovoga:

$ git rebase -i GLAVA ~ 3
[odvojena GLAVA 0798991] Dodano b.py
Datum: petak 30. ožujka 21:09:43 2018 -0700
1 datoteka promijenjena, 1 umetanje (+)
način stvaranja 100644 b.py
Uspješno rebazirane i ažurirane reference / heads / master.

Ako sada provjerite povijest urezivanja:

$ git log --oneline --graph --decorate
* 0798991 (GLAVA -> master) Dodano b.py
* 952244a Dodan a.py

Sve obveze za b.py zgnječeni su u jedan komitet. Možete provjeriti gledanjem b.py datoteka:

$ mačka b.py
ispis ("zdravo BBB")

Sadržaj je Modifikacije 2.

Zaključak

Prebaza je snažna naredba. Može vam pomoći da svoju povijest održavate čistom. Ali izbjegavajte ga koristiti za već javne obveze jer može izazvati sukobe i zbunjenost. Koristite ga samo za svoje lokalno spremište.

Daljni studiji:

Trackpad i pokazivač miša na ekranu AppyMouse za Windows tablete
Korisnicima tableta često nedostaje pokazivač miša, posebno kada su navični koristiti prijenosna računala. Pametni telefoni i tableti osjetljivi na do...
Srednja tipka miša ne radi u sustavu Windows 10
The srednja tipka miša pomaže vam u pomicanju kroz dugačke web stranice i zaslone s puno podataka. Ako se to zaustavi, na kraju ćete koristiti tipkovn...
Kako promijeniti lijevu i desnu tipku miša na računalu sa sustavom Windows 10
Sasvim je normalno da su svi uređaji računalnog miša ergonomski dizajnirani za dešnjake. Ali postoje dostupni uređaji za miš koji su posebno dizajnira...