Chapters ▾ 2nd Edition

3.3 Git Branching - Tak-bestuur (Branch Management)

Tak-bestuur (Branch Management)

Noudat jy 'n paar takke (branches) geskep, saamgesmelt (merged), en uitgevee het, kom ons kyk na 'n paar tak-bestuursinstrumente (branch-management tools) wat handig te pas sal kom wanneer jy heeltyd takke begin gebruik.

Die git branch opdrag doen meer as net om takke te skep en uit te vee. As jy dit sonder enige argumente uitvoer, kry jy 'n eenvoudige lys van jou huidige takke:

$ git branch
  iss53
* master
  testing

Let op die * karakter wat vooraan die master tak staan: dit dui die tak aan wat jy tans uitgecheck (checked out) het (dit wil sê, die tak waarna HEAD wys). Dit beteken dat as jy op hierdie punt vaslê (commit), sal die master tak vorentoe geskuif word met jou nuwe werk. Om die laaste vaslegging (commit) op elke tak te sien, kan jy git branch -v uitvoer:

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

Die nuttige --merged en --no-merged opsies kan hierdie lys filtreer na takke wat jy reeds, of nog nie, saamgesmelt (merged) het met die tak waarop jy tans is nie. Om te sien watter takke reeds by jou huidige tak saamgesmelt is, kan jy git branch --merged uitvoer:

$ git branch --merged
  iss53
* master

Omdat jy vroeër reeds iss53 ingesmelt (merged) het, sien jy dit in jou lys. Takke op hierdie lys sonder die * vooraan is oor die algemeen veilig om uit te vee met git branch -d; jy het reeds hul werk in 'n ander tak geïnkorporeer, so jy gaan niks verloor nie.

Om al die takke te sien wat werk bevat wat jy nog nie saamgesmelt (merged) het nie, kan jy git branch --no-merged uitvoer:

$ git branch --no-merged
  testing

Dit wys jou ander tak. Omdat dit werk bevat wat nog nie saamgesmelt (merged) is nie, sal 'n poging om dit met git branch -d uit te vee, misluk:

$ 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'.

As jy regtig die tak wil uitvee en daardie werk wil verloor, kan jy dit afdwing (force) met -D, soos die behulpsame boodskap uitwys.

Tip

Die opsies hierbo beskryf, --merged en --no-merged, sal, indien 'n vaslegging (commit) of taknaam (branch name) nie as 'n argument gegee word nie, vir jou wys wat onderskeidelik by jou huidige tak saamgesmelt (merged) of nie saamgesmelt is nie.

Jy kan altyd 'n bykomende argument verskaf om na die saamsmeltings-status (merge state) met betrekking tot 'n ander tak te vra sonder om daardie ander tak eers uit te check (checkout), soos in, wat is nog nie in die master tak saamgesmelt nie?

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

'n Taknaam verander (Changing a branch name)

Caution

Moenie takke hernoem (rename) wat steeds deur ander medewerkers in gebruik is nie. Moenie 'n tak soos master/main/mainline hernoem sonder om die afdeling Die master-tak se naam verander (Changing the master branch name) te lees nie.

Veronderstel jy het 'n tak wat bad-branch-name genoem word en jy wil dit verander na corrected-branch-name, terwyl jy alle geskiedenis behou. Jy wil ook die taknaam op die afgeleë bediener (remote) soos GitHub, GitLab, of 'n ander bediener verander. Hoe doen jy dit?

Hernoem (rename) die tak plaaslik (locally) met die git branch --move opdrag:

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

Dit vervang jou bad-branch-name met corrected-branch-name, maar hierdie verandering is vir eers net plaaslik (local). Om ander toe te laat om die gekorrigeerde tak op die afgeleë bediener (remote) te sien, stuur (push) dit op:

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

Kom ons kyk nou kortliks na waar ons nou is:

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

Let op dat jy op die corrected-branch-name tak is en dit op die afgeleë bediener (remote) beskikbaar is. Die tak met die slegte naam is egter ook nog daar teenwoordig, maar jy kan dit uitvee deur die volgende opdrag uit te voer:

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

Nou is die slegte taknaam ten volle vervang met die gekorrigeerde taknaam.

Die master-tak se naam verander (Changing the master branch name)

Warning

Om die naam van 'n tak soos master/main/mainline/default te verander, sal die integrasies, dienste, hulpmiddels (helper utilities) en bou/vrystelling-skrifte (build/release scripts) wat jou bewaarplek (repository) gebruik, breek. Maak seker dat jy met jou medewerkers konsulteer voordat jy dit doen. Maak ook seker dat jy 'n deeglike soektog deur jou bewaarplek (repo) doen en enige verwysings na die ou taknaam in jou kode en skrifte opdateer.

Hernoem jou plaaslike master tak na main met die volgende opdrag:

$ git branch --move master main

Daar is nie meer 'n plaaslike master tak nie, aangesien dit hernoem is na die main tak.

Om ander toe te laat om die nuwe main tak te sien, moet jy dit na die afgeleë bediener (remote) opstuur (push). Dit maak die hernoemde tak op die afgeleë bediener (remote) beskikbaar.

$ git push --set-upstream origin main

Nou eindig ons op met die volgende toestand:

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

Jou plaaslike master tak is weg, aangesien dit vervang is met die main tak. Die main tak is teenwoordig op die afgeleë bediener (remote). Die ou master tak is egter steeds teenwoordig op die afgeleë bediener. Ander medewerkers sal voortgaan om die master tak as die basis vir hul werk te gebruik, totdat jy verdere veranderings aanbring.

Nou het jy nog 'n paar take voor jou om die oorgang te voltooi:

  • Enige projekte wat van hierdie een afhanklik is, sal hul kode en/of konfigurasie moet opdateer.

  • Dateer enige toetsloper-konfigurasielêers (test-runner configuration files) op.

  • Pas bou- en vrystelling-skrifte (build and release scripts) aan.

  • Herlei (redirect) instellings op jou repo-gasheer (host) vir dinge soos die repo se verstektak (default branch), saamsmeltreëls (merge rules), en ander dinge wat by takname pas.

  • Dateer verwysings na die ou tak in dokumentasie op.

  • Maak enige "pull requests" toe, of smelt hulle saam (merge), wat die ou tak as teiken het.

Nadat jy al hierdie take gedoen het, en seker is dat die main tak presies soos die master tak presteer, kan jy die master tak uitvee:

$ git push origin --delete master