Kā skvošs apņemas rīkoties, lai jūsu vēsture būtu tīra
Strādājot ar Git, ieteicams apņemties rīkoties bieži, tāpēc, ja jūs sajaucat, jūs vienmēr varat atgriezties koda stāvoklī. Tomēr visu šo mini izmaiņu veikšana galvenajā filiālē ne vienmēr ir laba ideja. Tas padara vēsturi nesakārtotu un grūti izsekojamu.
Git nodrošina veidu, kā saspiest virkni jūsu saistību, izmantojot komandu rebase. Kad esat lokāli veicis izmaiņas konkrētā failā vai konkrētā objektā, vienmēr varat izmantot skvoša metodi, lai apvienotu izmaiņas, pirms veicat galveno filiāli. Tas palīdzēs citiem labāk izprast jūsu izmaiņas.
Brīdinājums: kaut arī jūs varat iziet no ārējiem krātuvēm un skvošs apņemas kopā, tā ir slikta ideja. Tas var radīt konfliktus un neskaidrības. Izvairieties mainīt vēsturi, kas jau ir publiska. Ievērojiet tikai tādas saistības, kas saistītas ar jūsu darbu.
Izstrādāsim piemēru.
Pieņemsim, ka mums ir divi faili a.py un b.py. Vispirms iesim cauri failu izveidošanas un modifikāciju veikšanas procesam:
$ mkdir myproject$ cd myproject /
$ git init
$ echo "print (" labdien A ")"> a.py
$ git add -A && git saistīt -m "Pievienots a.py "
$ echo "print (" labdien B ")"> b.py
$ git add -A && git saistīt -m "Pievienots b.py "
$ echo "print (" sveiki BB ")"> b.py
$ git pievienot -A && git izdarīt -m "b.py modifikācija 1 "
$ echo "print (" labdien BBB ")"> b.py
$ git pievienojiet -A && git izdarīt -m "b.py modifikācija 2 "
Ja pārbaudīsim saistību vēsturi, mēs redzēsim:
$ git log --oneline --graph --dekorēt* dfc0295 (GALVA -> kapteinis) b.py modifikācija 2
* ce9e582 b.py modifikācija 1
* 7a62538 Pievienots b.py
* 952244a Pievienots a.py
Kad mēs esam paveikuši savu darbu, mēs nolemjam visas izmaiņas ievietot b.Pielieciet vienā skaidrībā. Mēs skaitām, ka b ir 3 izdarītas.py no GALVAS. Mēs izsniedzam šādu komandu:
git rebase -i GALVA ~ 3Opcija -i liek Gitam izmantot interaktīvo režīmu.
Tam vajadzētu uznirst logā uz jūsu Git teksta redaktora:
pick 7a62538 Pievienots b.pyizvēlēties ce9e582 b.py modifikācija 1
izvēlēties dfc0295 b.py modifikācija 2
# Pārsūtiet 952244a… dfc0295 uz 952244a (3 komandas (-es))
#
# Komandas:
# p, pick = izmantot apņemšanos
# r, reword = izmantot apņemšanos, bet rediģējiet apņemšanās ziņojumu
# e, edit = use pühend, bet pārtrauciet labošanu
# s, skvošs = izmantot apņemšanos, bet ir iekļauts iepriekšējā saistībā
# f, fixup = patīk "skvošs", taču izmetiet šīs saistības žurnāla ziņojumu
# x, exec = palaist komandu (pārējā rinda), izmantojot čaulu
#
# Šīs rindas var atkārtoti pasūtīt; tie tiek izpildīti no augšas uz leju.
#
# Ja šeit noņemsit rindiņu, TIKS PIEŅEMTA.
#
# Tomēr, ja jūs noņemsit visu, atkārtotā bāze tiks pārtraukta.
#
# Ņemiet vērā, ka tukšās saistības tiek komentētas
~
Saistības ir hronoloģiski uzskaitītas augšpusē no agrākās līdz visjaunākajām. Jūs varat izvēlēties, kuru apņemties “izvēlēties” un kurš apņemas skvošu. Vienkāršības labad mēs izvēlēsimies pirmo apņemšanos, bet pārējos - tajā. Tātad mēs modificēsim tekstu šādi:
pick 7a62538 Pievienots b.pyskvošs ce9e582 b.py modifikācija 1
skvošs dfc0295 b.py modifikācija 2
# Pārsūtiet 952244a… dfc0295 uz 952244a (3 komandas (-es))
#
# Komandas:
# p, pick = izmantot apņemšanos
# r, reword = izmantot apņemšanos, bet rediģējiet apņemšanās ziņojumu
# e, edit = use pühend, bet pārtrauciet labošanu
# s, skvošs = izmantot apņemšanos, bet ir iekļauts iepriekšējā saistībā
# f, fixup = patīk "skvošs", taču izmetiet šīs saistības žurnāla ziņojumu
# x, exec = palaist komandu (pārējā rinda), izmantojot čaulu
#
# Šīs rindas var atkārtoti pasūtīt; tie tiek izpildīti no augšas uz leju.
#
# Ja šeit noņemsit rindu, TIKS PĀRSKATĪTS.
#
# Tomēr, ja jūs noņemsit visu, atkārtotā bāze tiks pārtraukta.
#
# Ņemiet vērā, ka tukšās saistības tiek komentētas
Tiklīdz saglabājat un aizverat teksta failu, vajadzētu parādīties vēl vienam teksta logam, kas izskatās šādi:
# Šī ir 3 saistību kombinācija.# Pirmais apņemšanās ziņojums ir:
Pievienots b.py
# Šis ir otrais apņemšanās ziņojums:
b.py modifikācija 1
# Šis ir trešais apņemšanās ziņojums:
b.py modifikācija 2
# Lūdzu, ievadiet saistību ziņojumu par izmaiņām. Līnijas sākas
# ar '#' tiks ignorēts, un tukšs ziņojums pārtrauc apņemšanos.
#
# Datums: piektdiena, 30. marts, 21:09:43, 2018 -0700
#
# atkārtota darbība notiek; uz 952244a
# Jūs pašlaik rediģējat apņemšanos, vienlaikus atkārtoti veicot filiāles “master” atiestatīšanu uz “952244a”.
#
# Izpildāmās izmaiņas:
# Jauns fails: b.py
#
Saglabājiet un aizveriet arī šo failu. Jums vajadzētu redzēt kaut ko līdzīgu šim:
$ git rebase -i GALVA ~ 3[atdalīts HEAD 0798991] Pievienots b.py
Datums: piektdiena, 30. marts, 21:09:43, 2018 -0700
1 fails mainīts, 1 ievietots (+)
izveidot režīmu 100644 b.py
Veiksmīgi pārbāzēts un atjaunināts refs / heads / master.
Ja tagad pārbaudīsit saistību vēsturi:
$ git log --oneline --graph --dekorēt* 0798991 (HEAD -> master) Pievienots b.py
* 952244a Pievienots a.py
Visas saistības par b.py ir salikti vienā izdarīšanā. To var pārbaudīt, apskatot b.py fails:
$ kaķis b.pyizdruka ("sveiki BBB")
Tam ir 2. modifikācijas saturs.
Secinājums
Rebase ir spēcīga komanda. Tas var palīdzēt saglabāt vēstures tīrību. Bet izvairieties to izmantot jau publiskām saistībām, jo tas var izraisīt konfliktus un neskaidrības. Izmantojiet to tikai savam vietējam repozitorijam.
Turpmāka izpēte:
- https: // git-scm.com / docs / git-rebase
- https: // git-scm.com / book / en / v2 / Git-Branching-Rebasing
- https: // git-scm.com / book / en / v2 / Git-Tools-Rewriting-History