Published on

Git: cherry pick, commit o'chirish va tahrirlash

Authors

Bu darsda uchta qo'shimcha git amali ko'rib chiqiladi:

  • Cherry pick β€” boshqa branchdan faqat bitta commit olish
  • Drop commit β€” xato commit-ni tarixdan olib tashlash
  • Edit commit message β€” commit xabarini o'zgartirish

Ushbu amallar Xcode Source Control tomonidan qo'llab-quvvatlanmaydi β€” buning uchun Git Kraken yoki boshqa GUI vositasi kerak.


Git asosiy terminlar β€” qisqacha takrorlash

AmalMa'no
CloneRepozitoriyni mahalliy kompyuterga nusxalash
CommitJoriy o'zgarishlarni checkpoint sifatida saqlash
StageCommit uchun o'zgarishlarni tayyorlash
StashO'zgarishlarni commit qilmasdan keyinroq uchun saqlash
PushMahalliy commit-larni remote repoga yuborish
PullRemote commit-larni mahalliy repoga olish
MergeIkki branchni birlashtirish
RebaseBitta branchni boshqasining tepasiga ko'chirish

Cherry pick β€” bitta commit ko'chirish

Qachon kerak bo'ladi?

Ikkita parallel branch bor. Birinchi branchda bir o'zgaruvchining tuzatilishi (bugfix) commit qilingan. Ikkinchi branch hali tayyor emas, to'liq merge qilish noto'g'ri β€” lekin faqat o'sha bitta tuzatishni olish zarur.

Bu holat uchun:

  • Merge β€” butun branchni birlashtiradi, zarur bo'lmagan commit-lar ham keladi
  • Interactive rebase β€” branchning asosini ko'chiradi, atigi bitta commit kerak bo'lsa ortiqcha
  • Cherry pick β€” faqat bitta commit-ni joriy branchga qo'shadi, boshqa hech narsa o'zgarmaydi

Cherry pick qanday ishlaydi

some-random-branch:    A --- B --- C
                             ↑
                         cherry-pick

some-other-feature:    D --- E --- B'

B commit-i some-other-feature branchiga nusxa sifatida qo'shiladi (B'). Original branch o'zgarmaydi.

Git Kraken-da cherry pick

  1. Source Control-da tarixdan kerakli commit-ni toping
  2. O'sha commit ustiga o'ng tugma bosing
  3. Cherry Pick Commit tanlang

Cherry pick qilingandan so'ng commit joriy branchga qo'shiladi. Keyinchalik original branch merge qilinganda, source control bu o'zgarish allaqachon mavjudligini tanib, conflict chiqarmaydi.

Xcode-da cherry pick

Xcode-da ham cherry pick mumkin: Repositories panelida kerakli commit topiladi, ustiga o'ng tugma bosib Cherry-pick Commit tanlanadi.


Commit hash β€” commit identifikatori

Har bir commit-ning noyob identifikatori β€” hash mavjud. U juda uzun raqam-harflar kombinatsiyasi:

ddc2094a8f3b1c7e...

Bu identifikator yordamida aniq bir commit topiladi (Ctrl+F bilan qidirish mumkin) va hamkasbga xabar qilib yuborilishi mumkin. Commit xabarlari bir xil bo'lishi mumkin, lekin hash har doim noyob.


Drop commit β€” commit-ni tarixdan o'chirish

Ba'zan xato commit qilib qo'yiladi β€” kerak bo'lmagan o'zgarish, noto'g'ri fayllar yoki xato xabar. Drop amali shu commit-ni tarixdan butunlay o'chiradi.

Git Kraken-da drop

  1. Tarixda o'chirmoqchi bo'lgan commit-ni toping
  2. Ustiga o'ng tugma bosing
  3. Drop Commit tanlang

Muhim: force push zarur

Drop qilingandan so'ng local versiya remote-dan ortda qoladi β€” chunki remote-da o'sha commit hali bor. Uni sinxronlash uchun force push kerak:

local (dropped) β†’ force push β†’ remote (commit deleted)

Ogohlantirish: Force push remote tarixni qayta yozadi. Drop qilingan commit-lar qaytarib bo'lmaydi. Bu amal faqat shaxsiy yoki hali shared bo'lmagan branchlarda ishlatilishi tavsiya etiladi.


Edit commit message β€” xabarni o'zgartirish

Yozilgan commit xabarida xatolik bo'lsa, uni tahrirlash mumkin.

Git Kraken-da tahrirlash

  1. Commit ustiga o'ng tugma bosing
  2. Edit Commit Message tanlang
  3. Xabarni o'zgartiring va tasdiqlang

Muhim: bu ham force push talab qiladi

Commit xabari o'zgartirilganda commit o'zi ham yangilanadi (yangi hash hosil bo'ladi). Natijada local va remote tarix mos kelmay qoladi β€” force push kerak bo'ladi.

Tavsiya: Commit xabarini tahrirlash amalda kamdan-kam zarur. Kichik imlo xatolari kelajakda muammo tug'dirmaydi. Agar commit hali push qilinmagan bo'lsa, tahrirlash xavfsiz. Lekin allaqachon remote-ga push qilingan commit xabari o'zgartirilsa va force push qilinsa β€” jamoaga xabar berish kerak.


Eski commit-ni tekshirish (checkout)

Git tarixidagi istalgan eski commit-ga o'tib ko'rish mumkin β€” bu o'sha vaqtdagi kod holatini ko'rish imkonini beradi.

Faqat ko'rish uchun

Tarixda kerakli commit-ni toping β†’ o'ng tugma β†’ Checkout Commit. Bu holatda "detached HEAD" holati yuzaga keladi β€” branch emas, faqat commit-da turibsiz. Xcode sarlavhasida branch nomi o'rniga commit hash ko'rinadi.

Ko'rish va o'zgartirish uchun

Eski commit-ni branch sifatida olish maqsadga muvofiqroq:

  1. Tarixda kerakli commit-ni toping
  2. O'ng tugma β†’ Create Branch Here
  3. Yangi branch nomini bering (masalan, old-main-pre-analytics)

Endi shu eski holatda mustaqil branch sifatida ishlash mumkin.


Xulosa

Bu darsda o'rganildi:

  • Cherry pick β€” boshqa branchdan faqat bitta commit-ni joriy branchga nusxalash; merge yoki rebase qilmasdan
  • Commit hash β€” har bir commit-ning noyob identifikatori, commit topish va ulashish uchun foydali
  • Drop commit β€” tarixdan commit-ni o'chirish; force push talab qiladi va qaytarib bo'lmaydi
  • Edit commit message β€” commit xabarini o'zgartirish; bu ham commit-ni yangilaydi va force push talab qiladi
  • Checkout commit β€” eski holatni ko'rish uchun; agar o'zgartirish kerak bo'lsa, yangi branch yaratish tavsiya etiladi
  • Ushbu amallarning barchasi Xcode-da mavjud emas β€” Git Kraken yoki boshqa GUI kerak

Keyingi darsda git flow va professional ish muhitida git ishlatish ko'rib chiqiladi.

Buy mea coffee