Asosiy filialda (main branch) o'zgarishlarni yozib olish qanday amalga oshiriladi?
sobes.tech AI
AIdan javob
Ishqor git revert yoki git rebase ("interaktiv" rejimda yoki git rebase --onto yordamida murakkabroq holatlar uchun) bilan ishlating va keyin git push -f.
git revert belgilangan commitlarning o'zgarishlarini bekor qiladigan yangi commit yaratadi. Bu xavfsizroq variant bo'lib, tarixni saqlab qoladi.
# Oxirgi commitni bekor qilish
git revert HEAD
# Aniq bir commitni uning hash bilan bekor qilish
git revert <commit-hash>
# Commitlar oralig'ini bekor qilish (oxirgisini hisobga olmaganda)
git revert <boshlanish-hash>..<tugash-hash>
# Commitlar oralig'ini (har ikkisini) bekor qilish
git revert -n <boshlanish-hash>^..<tugash-hash>
# O'zgarishlarni bitta qismda bekor qilish, alohida commitlar yaratmasdan
git revert -n <commit-hash-yoki-oralik>
# Yaratilgan commitni qo'llash
git commit -m "Revert changes"
git rebase commit tarixini qayta yozishga imkon beradi. Uni commitlarni o'chirish, birlashtirish yoki tartibini o'zgartirish uchun ishlatish mumkin. E'tiborli bo'lish kerak, ayniqsa umumiy filialarda.
# Oxirgi N commit uchun interaktiv rebase boshlash
git rebase -i HEAD~N
# Ochildi, 'pick' ni 'drop' ga o'zgartiring, o'chiriladigan commitlar uchun.
# Faylni saqlang va yoping.
# rebase --onto holati: feature filialidan commit A, B, C ni master ga ko'chirish,
# D commit'ini esa o'tkazib yuborish.
# Joriy filial: feature
# X -- Y -- Z -- D -- A -- B -- C (feature)
# /
# W (master)
# Maqsad: X -- Y -- Z -- W -- A -- B -- C (master)
git rebase --onto master D feature
# Bu yerda:
# master - maqsad filial, unga ko'chiramiz
# D - commit, undan oldin bo'lganlarni o'tkazib yuboramiz
# feature - manba filial, commitlarni ko'chirish uchun
git revert yoki git rebase qo'llangandan so'ng, lokal tarixni masofadagi bilan moslashtirish uchun (git push -f yoki git push --force-with-lease) majburiy bo'ladi, chunki lokal tarix masofadagi tarixdan farq qiladi.
# Rebase dan so'ng majburiy push
git push -f origin main
# Ko'proq xavfsiz push
git push --force-with-lease origin main
Muhim: Umumiy filialda (main) tarixni yozib o'zgartirish juda tavsiya etilmaydi, chunki bu boshqa ishlab chiquvchilarning avvalgi tarix bilan sinxronlashgan ishlarini buzishi mumkin. git revert dan foydalanish afzaldir. git rebase faqat juda maxsus holatlarda va to'liq oqibatlarini bilgan holda, odatda jamoa bilan kelishilgan holda qo'llanilishi kerak.