Sobes.tech
Middle

Hogyan írható felül a fő ágon (main branch) végrehajtott változtatások?

sobes.tech MI

Válasz az MI-től

Használja a git revert vagy a git rebase parancsokat (az "interaktív" mód vagy a git rebase --onto összetettebb forgatókönyvekhez), majd a git push -f parancsot.

A git revert létrehoz egy új commitot, amely visszavonja a megadott commitok változtatásait. Ez biztonságosabb, mivel megőrzi a történelmet.

# Utolsó commit visszavonása
git revert HEAD
# Egy adott commit visszavonása a hash alapján
git revert <commit-hash>
# Egy commit tartomány visszavonása (kivéve az utolsót)
git revert <kezdő-hash>..<záró-hash>
# Egy commit tartomány visszavonása (beleértve mindkettőt)
git revert -n <kezdő-hash>^..<záró-hash>
# Változtatások alkalmazása egy lépésben, anélkül, hogy külön commitokat hozna létre minden egyes visszavonásnál
git revert -n <commit-hash-vagy-tartomány>
# A létrehozott commit alkalmazása
git commit -m "Revert changes"

A git rebase lehetővé teszi a commit történet átírását. Használható a commitok törlésére, egyesítésére vagy sorrendjük módosítására. Óvatosság szükséges, különösen megosztott ágak esetén.

# Interaktív rebase indítása az utolsó N commitra
git rebase -i HEAD~N
# A megnyíló szerkesztőben a "pick"-et cserélje "drop"-ra a törölni kívánt commitok mellett.
# Mentse el és zárja be a fájlt.

# Rebase --onto szcenárió: commitok A, B, C áthelyezése a feature ágról a masterre,
# kihagyva a D commitot, ami a feature-en volt.
# Aktuális ág: feature
# X -- Y -- Z -- D -- A -- B -- C (feature)
#             /
#            W (master)
# Cél: X -- Y -- Z -- W -- A -- B -- C (master)
git rebase --onto master D feature
# Ahol:
# master - a célág, ahová áthelyezzük
# D - a commit, amelyig kihagyjuk az áthelyezést
# feature - a forráság, ahonnan a commitokat áthelyezzük

A git revert vagy git rebase alkalmazása után a helyi történet és a távoli eltérhet, így force push (git push -f vagy git push --force-with-lease) szükséges.

# Force push rebase után
git push -f origin main
# Biztonságosabb force push
git push --force-with-lease origin main

Fontos: A történet átírása a közös main ágon erősen nem ajánlott, mivel megzavarhatja más fejlesztők munkáját, akik már szinkronizáltak a korábbi történettel. Inkább a git revert használata javasolt. A git rebase a fő ágon csak kivételes esetekben és teljes tudatossággal alkalmazható, általában a csapat egyeztetése után.