Sobes.tech
Middle

Kuidas teha muudatuste üle kirjutamine peamises harus (main branch)?

sobes.tech AI

Vastus AI-lt

Kasuta git revert või git rebase (interaktiivses režiimis või git rebase --onto keerulisemate stsenaariumide jaoks) koos järgneva git push -f.

git revert loob uue commit, mis tühistab märgitud commitide muudatused. See on turvalisem variant, kuna säilitab ajaloo.

# Viimase commit'i tühistamine
git revert HEAD
# Konkreetse commit'i tühistamine selle hash'i järgi
git revert <commit-hash>
# Commit'ide vahemiku tühistamine (välja arvatud viimane)
git revert <algus-hash>..<lõpp-hash>
# Vahemiku tühistamine (mõlemad kaasatud)
git revert -n <algus-hash>^..<lõpp-hash>
# Muudatuste tühistamine, mis rakendati ühe tervikuna ilma eraldi commit'ideta
ngit revert -n <commit-hash- või-vahemik>
# Loodud commit'i rakendamine
git commit -m "Revert changes"

git rebase võimaldab ümber kirjutada commit'ide ajaloo. Seda saab kasutada kustutamiseks, ühendamiseks või järjekorra muutmiseks. Vajalik on ettevaatlikkus, eriti ühiste harude puhul:

# Interaktiivse rebase'i alustamine viimaste N commit'ide jaoks
git rebase -i HEAD~N
# Avatud redaktoris asendage 'pick' 'drop'-ga soovitud commit'ide jaoks.
# Faili salvestamine ja sulgemine.

# Rebase --onto stsenaarium: A, B, C commit'ide liigutamine feature harust masterisse,
# välja arvatud D commit, mis oli feature'is.
# Praegune feature haru
# X -- Y -- Z -- D -- A -- B -- C (feature)
#             /
#            W (master)
# Eesmärk: X -- Y -- Z -- W -- A -- B -- C (master)
git rebase --onto master D feature
# Kus:
# master - sihtharu, kuhu liigutame
# D - commit, mille juurde välja jäetakse liigutus
# feature - lähteharu, kust commit'id võetakse liigutamiseks

Pärast git revert või git rebase kasutamist peamise haru peal, on vaja sundsaatmist (git push -f või git push --force-with-lease), kuna kohaliku ajaloo ja kaugajaloo vahel on erinevus:

# Sundsaatmine rebase'i järgselt
git push -f origin main
# Turvalisem sundsaatmine
git push --force-with-lease origin main

Oluline: Ajaloo üle kirjutamine ühises harus (main) ei ole soovitatav, kuna see võib häirida teisi arendajaid, kes on juba eelneva ajaloo versiooniga sünkroonis. Soovitatav on kasutada git revert. git rebase peamise haru peal tuleks kasutada ainult erandjuhtudel ja täieliku kindlusega tagajärgedes, tavaliselt kogu meeskonna kokkuleppel.