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.