Middle
Hogyan történik a branchek összevonása (merge) vagy a történet átírása (rebase) a verziókezelő rendszerben a cégnél?
sobes.tech MI
Válasz az MI-től
Csapatunkban egy Git-alapú munkafolyamatot követünk. A változtatások integrálásához két fő megközelítést használunk: merge és rebase, a helyzet és az ág típusától függően választva.
Merge:
- Általában hosszú életű ágak összefésülésére alkalmazzák, például dev a main-be, vagy funkcióágak integrálására dev-be.
- Egy merge commitet hoz létre, amely világosan mutatja, mikor történt a változtatások összefésülése más ágakról.
- Megőrzi az összes commit történetét, beleértve az összes elágazást.
git checkout dev // Átváltunk a célágra
git merge feature/új-funkció // Összefésüljük a funkcióágat
Rebase:
- A tiszta és lineáris commit történet fenntartására használják a funkcióágakban, amíg azok nem kerülnek integrálásra (általában dev-be).
- Áthelyezi a jelenlegi ág commitjait a célág tetejére (dev), hatékonyan "újraírásával" a történetnek.
- Egyszerűsíti a történetet, elkerülve a merge commitokat minden kis funkció vagy javítás esetén.
- Fontos: Soha ne hajts végre rebase-t nyilvános ágakon, amelyeken más fejlesztők dolgoznak, mert ez konfliktusokat okozhat a változtatások pullolásakor.
git checkout feature/új-funkció // Átváltunk a funkcióágra
git rebase dev // Áthelyezzük a funkcióág commitjait dev tetejére
// Konfliktusok esetén oldjuk meg őket
git push --force-with-lease // Használjuk a --force-with-lease-t biztonságos push-hoz rebase után
A mi standard munkafolyamatunk:
- Egy új funkció vagy javítás külön ágban (feature/..., fix/...) fejlesztődik.
- Időszakosan (pull request előtt vagy a dev-vel való szinkronizálás érdekében) a funkcióág rebase-olódik a jelenlegi dev verzióra. Ez segít korai szakaszban konfliktusokat megoldani.
- A fejlesztés és a kódáttekintés befejezése után a funkcióág
no-ff-el (nem gyors előre) merge-ölődik adev-be, hogy megőrizze a merge információt. Vagy ritkábban, squash-olva egy commit-ba, mielőtt merge-elnénk adev-be, különösen nagyon kicsi funkciók vagy javítások esetén. - A
dev-ből időszakosan kiadások készülnek amain-be (gyártási ág), mindig merge segítségével.
Így egyensúlyt teremtünk a commit történet megőrzése (merge) és a tiszta fejlesztési ág fenntartása (rebase a funkcióágakon) között.