- Git rebase
- Mielőtt rebasing
- Rendszeres rebase
- Interaktív rebase
- Erő-nyomja meg
- Merge konfliktusok
Ez az útmutató segít, hogy kezdődött rebasing, erő-tolja, fixingmerge konfliktusok helyben.
mielőtt belemerülne ebbe a dokumentumba, győződjön meg róla, hogy ismeri a usingGit használatát a parancssoron keresztül.
Git rebase
az Újraindítás nagyon gyakori művelet., A következő rebase opciók állnak rendelkezésre:
- rendszeres rebase.
- Interactive rebase.
git rebase
átírja a commit előzményeit. Káros lehet ezt tenniharzott ágak. Bonyolult és nehezen megoldható konfliktusokat okozhat. Ezekben az esetekben ahelyett, hogy a fióktelepet az alapértelmezett ághoz igazítaná, inkább húzza meg (git pull origin master
). Hasonló a helyzet a közreműködők munkájának veszélyeztetése nélkül., biztonságosabb biztonsági másolatot készíteni az ágról az újraindítás előtt, hogy megbizonyosodjon arról, hogy nem veszítenek elbármilyen változás. Vegyük például egy funkció branchcalled my-feature-branch
:
-
Nyissa meg a funkció ág a terminál:
git checkout my-feature-branch
-
a Pénztár egy új ág tőle:
git checkout -b my-feature-branch-backup
-
Menj vissza az eredeti fióktelep:
git checkout my-feature-branch
Most nyugodtan rebase meg., Ha valami rosszul megy, akkor visszaállíthatjaa változások a my-feature-branch
my-feature-branch-backup
:
megjegyzés,hogy ha hozzáadta a változtatásokat a my-feature-branch
A biztonsági mentési ág létrehozása után elveszíti őket a visszaállításkor.
Regular rebase
rendszeres rebase frissítheti a szolgáltatás ág a defaultbranch (vagy bármely más ág).Ez fontos lépés a Git-alapú fejlesztési stratégiák számára., Biztosíthatja, hogy a kódbázishoz hozzáadott módosítások a funkcióbranch létrehozása után ne törjék meg a célághoz hozzáadott meglévő módosításokat.,
For example, to update your branch my-feature-branch
with master
:
-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
amikor rebase:
- Git importálja az összes kötelezettséget benyújtott
master
után themoment létrehozta a funkció ág, amíg a jelen pillanatban. - Git helyezi a vállalja, hogy a szolgáltatás ág tetején, minden követ el importált
master
:
akkor cserélje master
bármely más ága azt szeretné, hogy rebase ellen, például release-10-3
., A origin
más remoterepositorokkal is helyettesíthető, például upstream
. Annak ellenőrzéséhez, hogy milyen távirányítókat kapcsolt a localrepository-hoz, futtathatja a git remote -v
parancsot.
ha vannak egyesítési konfliktusok, Git kéri, hogy fixthem folytatása előtt a rebase.
Ha többet szeretne megtudni, ellenőrizze a Git rebasing and rebasing strategies dokumentációját.
Interactive rebase
interactive rebase segítségével módosíthatja a committeket. Például módosítsa a commitmessage, squash (csatlakozz több kötelezettséget egy), szerkesztés, vagy deletecommits., Használja a rebase-t a múltbeli commit üzenetek megváltoztatásához, valamint a fióktelep elkövetési előzményeinek megszervezéséhez, hogy tiszta maradjon.
ha valamit meg akar változtatni a legutóbbi kötelezettségvállalásokban, használja az interactiverebase-t a --interactive
(vagy -i
) jelzéssel a rebase parancsra.,
például, ha szerkeszteni szeretné az utolsó három követést az ágában(HEAD~3
), futtassa:
git rebase -i HEAD~3
git megnyitja az utolsó három követést a terminál szövegszerkesztőjében és leírjaminden interaktív rebase opció használható. Az alapértelmezett opció pick
, amely változatlanul tartja a kötelezettséget. Cserélje ki a pick
kulcsszótaz egyes elkötelezettségekben végrehajtani kívánt művelet szerint. Ehhez szerkesztenie kella terminál szövegszerkesztőjében elkötelezi magát.,
például, ha a Vim, mint a szövegszerkesztő ina macOS a ZSH
> shell, valamint azt szeretné, hogy squash mind a három követ el(csatlakozzon hozzájuk egy):
- Nyomja meg az ion a billentyűzet kapcsoló Vim szerkesztési mód.
- navigáljon a billentyűzet nyilaival a második commit kulcs szerkesztéséheza
pick
squash
(vagys
). Ugyanezt tegye a harmadik elkövetéssel.Az első elkövetést változatlanul kell hagyni (pick
), mivel a másodikat és a harmadikat az elsőbe akarjuk dobni., - nyomja meg az Escape billentyűt a szerkesztési mód elhagyásához.
- Type
:wq
to ” write “(save) and”quit”. - Git kimenetek a commit üzenetet, így van egy esélyt, hogy szerkeszteni:
- minden sort kezdve
#
figyelmen kívül hagyják, és nem szerepel a commitmessage. Minden más benne van. - ahhoz, hogy úgy hagyja, ahogy van, írja be a
:wq
. A commit üzenet szerkesztéséhez: váltson aediting módra, szerkessze a commit üzenetet, majd mentse el úgy, ahogy éppen tette.,
- minden sort kezdve
- Ha még nem tolta el a követeléseket a távoli ághoz az újraindítás előtt, nyomja meg a módosításokat rendesen. Ha már nyomta volna ezeket a köteleket, inkább erő-nyomjon.
vegye figyelembe, hogy a parancssoron keresztüli szerkesztési lépések kissé eltérhetnek az operációs rendszertől és a használt héjtól függően.
lásd számos visszavonás lehetőségek Gitfor mélyebb betekintést interaktív rebase.,
Force-push
ha összetettebb műveleteket hajt végre, például squash commit, reset orebase az ágat, akkor kényszeríteni kell egy frissítést a távoli ágra.Ezek a műveletek azt jelentik, hogy újraírják az branch.To kényszerítsen egy frissítést, adja át a --force
vagy -f
zászlót a push
parancsra. Forexample:
git push --force origin my-feature-branch
a frissítés kényszerítése nem ajánlott, ha sharedbranches-en dolgozik.
Alternatív megoldásként átadhatja a --force-with-lease
zászlót., Biztonságosabb, mivel nem ír felül semmilyen munkát a remotebranch-en, ha valaki más több kötelezettséget adott a távoli ághoz:
git push --force-with-lease origin my-feature-branch
Ha az erőltetni kívánt ág védett, akkor nem kényszerítheti rá-nyomja rá, hacsak nem védi először. Ezután újra és újra meg lehet védeni.,
Merge konfliktusok
Mint a Git alapján összehasonlítva változata egy fileline-by-line, amikor egy sort változott a fióktelep egybeesik a sameline megváltozott a cél ág (miután a pillanatban, amikor létrehozta a funkciót ág-re), Gitidentifies ezek a változások, mint egy körlevél konfliktus. A javításhoz választania kella vonal melyik verzióját szeretné megtartani.
a legtöbb konfliktus megoldható a GitLab felhasználói felületen keresztül.
bonyolultabb esetekben különböző módszerek vannak a megoldásukra. Vannak olyan Git GUI alkalmazások is, amelyek segíthetnek a különbségek vizualizálásában.,
A javításhoz konfliktusok helyben, akkor használja a következő módszert:
-
Nyissa meg a terminál, illetve a pénztár a szolgáltatás ág, például a
my-feature-branch
:git checkout my-feature-branch
-
Rebase a fióktelep ellen, a cél ágat, Gitprompts a konfliktusok:
git rebase origin/master
- Nyissa meg az érintett fájlt a kódszerkesztő a preferencia.
- keresse meg a konfliktusblokkot:
- a jelölővel kezdődik:
<<<<<<< HEAD
., - lent, ott van a tartalom a változásokat.
- a marker:
=======
jelzi a változások végét. - az alábbiakban a célág legújabb változásainak tartalma található.
- a marker
>>>>>>>
jelzi a konfliktus végét.
- a jelölővel kezdődik:
- a fájl szerkesztése: válassza ki, hogy melyik verziót (a
=======
előtt vagy után) szeretné megtartani, majd törölje a fájlban nem kívánt tartalom részét. - törölje a jelölőket.
- mentse el a fájlt.,
- ismételje meg a folyamatot, ha más ütköző fájlok is vannak.
-
a Szakaszban a változások:
git add .
-
a módosításokat:
git commit -m "Fix merge conflicts"
-
Tovább rebasing:
git rebase --continue
cautionUp, hogy ezen a ponton, lehet futtatnigit rebase --abort
megállítani a folyamatot.A Git megszakítja a rebase-t, és visszaforgatja a fióktelepet abba az állapotba, ahol korábban voltgit rebase
.,Agit rebase --continue
futtatása után a rebase nem szakítható meg. - Force-push to your remote branch.
Leave a Reply