Sobes.tech
Junior

Qanday qilib commitda belgi o'zgartiriladi?

sobes.tech AI

AIdan javob

Commitdagi belgi bilan o'zgartirishning bir nechta usullari mavjud:

  1. So'nggi commitni o'zgartirish (hali yuborilmagan):

    Siz git commit --amend buyrug'idan foydalanishingiz mumkin. Bu so'nggi commit xabarini o'zgartirish yoki fayllarni qo'shish/olib tashlash imkonini beradi.

    # So'nggi commit xabarini o'zgartirish
    git commit --amend -m "Yangi commit xabari boshqa belgi bilan"
    

    Bu buyruqni bajargandan so'ng, sizga commit xabarini tahrirlash uchun matn muharriri ochiladi.

  2. Kuyidagi eski commitlarni o'zgartirish (interaktiv rebase yordamida):

    Bu usul biroz murakkabroq, lekin tarixdagi har qanday commitni o'zgartirishga imkon beradi. Bu buyruq tarixni yozib oladi, shuning uchun uni boshqa odamlar bilan ishlayotgan umumiy repozitoriyga yuborilgan commitlar bilan qilish tavsiya etilmaydi.

    # O'zgartirmoqchi bo'lgan commitdan oldingi commitdan interaktiv rebase boshlash
    git rebase -i HEAD~N  # bu yerda N - HEAD dan qancha commit orqaga qarab
    

    Bu buyruqni bajargandan so'ng, oxirgi N commit ro'yxati bilan matn muharriri ochiladi. O'zgartirmoqchi bo'lgan commitni toping va uning oldiga joylashgan pick so'zini reword yoki r bilan almashtiring.

    Muharrirni saqlang va yoping. Git, reword bilan belgilangan har bir commitning xabarini o'zgartirishni taklif qiladi.

    Interaktiv rebase uchun misol mazmuni:

    pick a1b2c3d Commit 1: Asl xabar
    pick e4f5g6h Commit 2: Yana bir xabar
    pick i7j8k9l Commit 3: O'zgartiriladigan commit
    

    Buni quyidagicha o'zgartiring:

    pick a1b2c3d Commit 1: Asl xabar
    pick e4f5g6h Commit 2: Yana bir xabar
    reword i7j8k9l Commit 3: O'zgartiriladigan commit
    

    Saqlang va yoping, Git uchinchi commitda to'xtaydi va uning xabarini o'zgartirishni so'raydi.

  3. git filter-branch yordamida (murakkabroq o'zgartirishlar uchun):

    Bu usul juda kuchli, ammo ehtiyot bo'lish kerak. Bu har bir commitga skriptni qo'llash orqali tarixni yozib oladi. Bu commit xabarlaridagi belgilarning masshtabda o'zgarishi uchun ishlatilishi mumkin.

    # `_` belgisini `-` bilan almashtirish uchun filter-branch misoli
    git filter-branch --msg-filter 'sed "s/_/-/"' -- --all
    

    Bu barcha tarmoqlarning tarixini yozib oladi. Juda ehtiyot bo'ling!

Muhim eslatma: Zaten yuborilgan commitlarning tarixini o'zgartirish boshqa dasturchilarga muammo tug'dirishi mumkin. Ular o'zlarining mahalliy repozitoriyalarini o'zgartirilgan tarix bilan sinxronlashtirishlari kerak bo'ladi, bu esa majburiy yuklab olish (git pull --rebase) yoki reset qilish (git fetch && git reset --hard origin/branch) talab qilishi mumkin.

Agar commit allaqachon yuborilgan bo'lsa, tarixni yozib olish o'rniga, yangi commit qilish tavsiya etiladi.