Git
Chapters ▾ 2nd Edition

3.3 Veje Git - Upravljanje vej

Upravljanje vej

Sedaj, ko ste izdelali, združili in izbrisali nekaj vej, poglejmo nekaj orodij za upravljanje vej, ki bodo v pomoč, ko boste začeli uporabljati veje ves čas.

Ukaz git branch naredi več kot samo, da ustvari in izbriše veje. Če ga poženete brez argumentov, dobite enostaven seznam svojih trenutnih vej:

$ git branch
  iss53
* master
  testing

Bodite pozorni na znak *, ki je predpona veje master: označuje vejo, ki ste jo trenutno izvlekli (veja, kamor kaže HEAD). To pomeni, da če na tej točki naredite potrditev, se bo veja master premaknila naprej z vašim novim delom. Da pogledate zadnjo potrditev na vsaki veji, lahko poženete git branch -v:

$ git branch -v
  iss53   93b412c Fix javascript issue
* master  7a98805 Merge branch 'iss53'
  testing 782fd34 Add scott to the author list in the readme

Uporabni možnosti --merged in --no-merged lahko filtrirata ta seznam na veje, ki ste jih že ali še niste združili v vejo, na kateri trenutno delate. Da pogledate, katere veje so že združene v vejo, na kateri ste, lahko poženete git branch --merged:

$ git branch --merged
  iss53
* master

Ker ste iss53 že prej združili, jo vidite na svojem seznamu. Veje na tem seznamu brez * spredaj se v splošnem lahko izbriše z git branch -d; njihovo delo ste že vkomponirali v drugo vejo, torej ne boste ničesar izgubili.

Da pogledate vse veje, ki vsebujejo delo, ki ga še niste združili, lahko poženete git branch --no-merged:

$ git branch --no-merged
  testing

To pokaže vašo drugo vejo. Ker vsebuje delo, ki še ni bilo združeno, poskus brisanja z git branch -d ne bo uspešen:

$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.

Če zares želite izbrisati vejo in izgubiti to delo, lahko brisanje prisilite z -D, kot nakazuje koristno sporočilo.

Namig

Možnosti, opisani zgoraj, --merged in --no-merged, vam bosta, če jima ne podate imena potrditve ali veje kot argumenta, pokazali, kaj je, oziroma ni združeno v vašo trenutno vejo.

Vedno lahko podate dodaten argument, da povprašate o stanju združitve glede na neko drugo vejo, ne da bi najprej izvlekli to drugo vejo, kot na primer, kaj ni združeno v vejo master?

$ git checkout testing
$ git branch --no-merged master
  topicA
  featureB

Spreminjanje imena veje

Pozor

Ne preimenujte vej, ki so še vedno v uporabi pri drugih sodelavcih. Ne preimenujte vej, kot so master/main/mainline, ne da bi prebrali odsek Spreminjanje imena veje master.

Predpostavimo, da imate vejo, ki se imenuje bad-branch-name in jo želite spremeniti v corrected-branch-name, pri čemer bi radi ohranili celotno zgodovino. Poleg tega želite ime veje spremeniti tudi na oddaljenem strežniku (GitHub, GitLab, ali drugem strežniku). Kako to storiti?

Lokalno preimenujte vejo z ukazom git branch --move:

$ git branch --move bad-branch-name corrected-branch-name

To nadomesti vašo vejo bad-branch-name s corrected-branch-name, vendar je ta sprememba trenutno le lokalna. Da bi drugi videli popravljeno vejo na oddaljenem strežniku, jo morate potisniti:

$ git push --set-upstream origin corrected-branch-name

Sedaj si bomo na kratko ogledali, kje smo:

$ git branch --all
* corrected-branch-name
  main
  remotes/origin/bad-branch-name
  remotes/origin/corrected-branch-name
  remotes/origin/main

Opazite, da ste na veji corrected-branch-name in da je na voljo na oddaljenem strežniku. Vendar pa je veja s slabim imenom še vedno prisotna tam, ampak jo pa lahko izbrišete z izvedbo naslednjega ukaza:

$ git push origin --delete bad-branch-name

Tako je slabo ime veje v celoti nadomeščeno s popravljenim imenom veje.

Spreminjanje imena veje master

Opozorilo

Spreminjanje imena veje, kot je master/main/mainline/default, bo pokvarilo integracije, storitve, pomožne programe in skripte za gradnjo in izdajo, katere uporablja vaš repozitorij. Preden to storite, se posvetujte s svojimi sodelavci. Prav tako poskrbite, da temeljito preiščete svoj repozitorij in posodobite vse sklice na staro ime veje v svoji kodi in skriptih.

Preimenujte vašo lokalno vejo master v main s sledečim ukazom:

$ git branch --move master main

Sedaj lokalna veja master ne obstaja več, ker je bila preimenovana v vejo main.

Da sporočite drugim, da vidijo novo vejo main, jo morate potisniti na daljavo. To naredi preimenovano vejo na voljo na daljavi.

$ git push --set-upstream origin main

Sedaj imamo naslednje stanje:

$ git branch --all
* main
  remotes/origin/HEAD -> origin/master
  remotes/origin/main
  remotes/origin/master

Vaša lokalna veja master je izginila, saj jo je zamenjala veja main. Veja main je prisotna na oddaljenem strežniku. Vendar pa je stara veja master še vedno prisotna na oddaljenem strežniku. Drugi sodelavci bodo nadaljevali z uporabo veje master kot osnovo za svoje delo, dokler ne izvedete nadaljnjih sprememb.

Zdaj imate pred seboj še nekaj nalog, ki jih morate opraviti, da dokončate prehod:

  • Vsi projekti, ki temeljijo na tem, bodo morali posodobiti svojo kodo in/ali konfiguracijo.

  • Posodobite konfiguracijske datoteke za pogone testov.

  • Prilagodite skripte za gradnjo in izdajo.

  • Preusmerite nastavitve na gostitelju svojega repozitorija za stvari, kot so privzeta veja repozitorija, pravila združevanja in druge stvari, ki se prilegajo imenom vej.

  • Posodobite sklice na staro vejo v dokumentaciji.

  • Zaprite ali združite vse zahtevke potegov, ki se nanašajo na staro vejo.

Ko boste opravili vse te naloge in boste prepričani, da veja main deluje enako kot veja master, lahko izbrišete vejo master:

$ git push origin --delete master
scroll-to-top