Cherry-pick: یہ کیا ہے، اسے کیسے انجام دیں اور Git کمانڈز

مصنف: IT Sectr اشاعت: 2026-08-01 مطالعے کا وقت: 8 منٹ

Cherry-pick ایک Git کمانڈ ہے جو مخصوص کمٹ سے تبدیلیوں کو موجودہ برانچ پر لاگو کرتی ہے، بغیر ماخذ برانچ کی پوری تاریخ منتقل کیے۔ merge یا rebase کے برعکس، cherry-pick ہر کمٹ کے ساتھ انفرادی طور پر کام کرتا ہے: ڈویلپر ہیش کے ذریعے ایک مخصوص کمٹ منتخب کرتا ہے اور صرف اس کی تبدیلیاں منتقل کرتا ہے۔ Git دستاویزات (2026) کے مطابق، cherry-pick خاص طور پر ریلیز برانچوں کے درمیان اصلاحات کی ہدفی منتقلی کے لیے مفید ہے جب مکمل merge ضرورت سے زیادہ یا خطرناک ہو۔ کمانڈ نئی ہیش کے ساتھ ایک نیا کمٹ بناتا ہے، لیکن اصل پیغام اور مصنف کو برقرار رکھتا ہے۔

اہم نکات

  • Cherry-pick — ایک برانچ سے دوسری برانچ میں ہیش کے ذریعے انفرادی کمٹ کی منتقلی۔
  • نئی ہیش — ہر cherry-pick اصل سے کاپی کردہ تبدیلیوں کے ساتھ ایک نیا کمٹ بناتا ہے۔
  • ایک ساتھ متعدد کمٹ — git cherry-pick A B C مخصوص کمٹ کو ترتیب وار منتقل کرتا ہے۔
  • ریلیز برانچیں — اہم منظر نامہ: غیر ضروری کوڈ کے بغیر develop سے release میں بگ فکس منتقل کرنا۔
  • تنازعات ممکن — کمٹ لاگو کرتے وقت، Git تنازعات کے حل کی درخواست کر سکتا ہے۔

Git میں cherry-pick کیا ہے

Cherry-pick git cherry-pick کمانڈ ہے جو موجودہ کمٹ سے تبدیلیاں لیتی ہے اور انہیں موجودہ برانچ میں ایک نئے کمٹ کے طور پر لاگو کرتی ہے۔ اصل کمٹ اپنی برانچ میں اپنی جگہ پر رہتا ہے، جبکہ ہدف برانچ میں تبدیلیوں کی ایک کاپی بنائی جاتی ہے۔ کمانڈ اس وقت مفید ہے جب آپ کو پوری برانچ منتقل کیے بغیر کسی مخصوص اصلاح کو منتقل کرنے کی ضرورت ہو۔

ترکیب: git cherry-pick <commit-hash>۔ Git مخصوص کمٹ کے اپنے والد کے ساتھ فرق (diff) کا تجزیہ کرتا ہے اور اس فرق کو موجودہ برانچ پر لاگو کرتا ہے۔ اگر متعدد فائلیں تبدیل کی جاتی ہیں، تو وہ سب ایک ساتھ منتقل ہو جاتی ہیں۔ کمانڈ رینجز بھی قبول کرتا ہے: git cherry-pick A..B — A سے B تک کے تمام کمٹ، A کو چھوڑ کر۔

فلیگز صلاحیتوں کو بڑھاتے ہیں: -n (--no-commit) کمٹ بنائے بغیر ورکنگ ڈائریکٹری اور انڈیکس میں تبدیلیاں لاگو کرتا ہے — اس وقت مفید جب آپ کو متعدد کمٹ کی تبدیلیوں کو ایک میں یکجا کرنے کی ضرورت ہو۔ -x فلیگ کمٹ پیغام میں ایک لائن (cherry picked from commit ...) شامل کرتا ہے، جو تاریخ میں تبدیلیوں کی اصل کو ٹریک کرنا آسان بناتا ہے۔

bash
# ہیش کے ذریعے ایک کمٹ کو چیری پِک کریں
git cherry-pick a1b2c3d

# متعدد کمٹ کو چیری پِک کریں (ترتیب وار)
git cherry-pick a1b2c3d e4f5g6h i6j7k8l

# خودکار کمٹ کے بغیر چیری پِک کریں
git cherry-pick -n a1b2c3d

# -x فلیگ اصل کمٹ کا حوالہ شامل کرتا ہے
git cherry-pick -x a1b2c3d

Cherry-pick کب استعمال کریں

اہم منظر نامہ ریلیز برانچوں کے درمیان اصلاحات کی منتقلی ہے۔ تصور کریں: develop میں ایک سنگین بگ پایا اور ٹھیک کیا گیا۔ ریلیز برانچ release/v2.1 پہلے ہی الگ ہو چکی ہے اور اس میں بھی یہ بگ موجود ہے۔ پورے develop کو release میں merge کرنے سے بہت سا نامکمل کوڈ آئے گا، جبکہ واحد فکس کمٹ پر cherry-pick لاگو کرنا ایک محفوظ اور درست حل ہے۔

دوسرا منظر نامہ بعد میں بحالی کے ساتھ تبدیلیوں کو واپس لینا ہے۔ اگر کوئی کمٹ git revert کے ذریعے واپس لیا گیا اور بعد میں پتہ چلتا ہے کہ واپس لینا غلط تھا — واپس لیے گئے کمٹ پر cherry-pick لاگو کرنے سے تبدیلیاں بحال ہو جاتی ہیں۔ یہ revert کو واپس لینے سے زیادہ درست ہے کیونکہ یہ بار بار تنازعات پیدا نہیں کرتا۔

تیسرا منظر نامہ انضمام کی جانچ کے لیے مختلف فیچر برانچوں سے کمٹ کو یکجا کرنا ہے۔ متعدد نامکمل برانچوں (نامکمل کوڈ کے ساتھ) کو merge کرنے کے بجائے، آپ ہر ایک سے صرف تیار کمٹ منتخب کر سکتے ہیں اور ان کے اجتماعی کام کی جانچ کر سکتے ہیں۔

  • بگ فکسز — نامکمل کوڈ کے بغیر develop سے release میں اصلاح منتقل کرنا۔
  • Hotfix — hotfix برانچ سے main اور develop دونوں میں بیک وقت اصلاح لاگو کرنا۔
  • غلط revert کو واپس لینا — تبدیلیاں بحال کرنے کے لیے واپس لیے گئے کمٹ پر cherry-pick لاگو کرنا۔
  • جانچ — انضمام کی جانچ کے لیے مختلف برانچوں سے منتخب کمٹ جمع کرنا۔

Cherry-pick بمقابلہ rebase اور merge

Cherry-pick rebase اور merge سے اس لحاظ سے مختلف ہے کہ یہ پوری برانچوں کے بجائے انفرادی کمٹ کی سطح پر کام کرتا ہے۔ جہاں rebase ایک برانچ کے تمام کمٹ منتقل کرتا ہے اور merge دو برانچوں کو یکجا کرتا ہے، cherry-pick صرف ضروری کمٹ منتخب کرتا ہے۔ یہ اسے زیادہ درست آلہ بناتا ہے، لیکن زیادہ دستی بھی۔

ایک اور فرق تصنیف ہے۔ Cherry-pick کے دوران، Git بطور ڈیفالٹ اصل کمٹ کے مصنف کو برقرار رکھتا ہے، لیکن committer موجودہ صارف بن جاتا ہے۔ کمٹ پیغام -x فلیگ کے ذریعے اصل کو ٹریک کر سکتا ہے۔ Rebase کے دوران، مصنف اور committer دونوں نئی ہیش کے ساتھ موجودہ صارف بن جاتے ہیں۔

کارکردگی: ایک کمٹ پر cherry-pick لاگو کرنا بہت سے کمٹ والی دو برانچوں کو merge کرنے سے تیز ہے۔ لیکن اگر آپ کو درجنوں کمٹ منتقل کرنے کی ضرورت ہے، تو ایک عارضی برانچ بنا کر rebase کرنا بہتر ہے — یہ زیادہ موثر ہوگا اور درجنوں ہیش متعین کرنے کی ضرورت نہیں ہوگی۔

عملدائرہمضر اثرات
Cherry-pickانفرادی کمٹنئی ہیش، کوڈ کی نقل
Rebaseبرانچ کے تمام کمٹتاریخ کی دوبارہ تحریر، نئی ہیشز
Mergeبرانچوں کا مکمل انضمامMerge کمٹ، تاریخ کا تحفظ

متعدد کمٹ کی منتقلی

متعدد کمٹ کو ایک کمانڈ سے منتقل کیا جا سکتا ہے: git cherry-pick A B C۔ Git مخصوص ترتیب میں کمٹ کو ترتیب وار لاگو کرتا ہے۔ اگر کوئی کمٹ تنازع کا سبب بنتا ہے، تو cherry-pick رک جاتا ہے، اور ڈویلپر کو تنازع حل کرنا ہوگا، پھر git cherry-pick --continue کے ساتھ جاری رکھنا ہوگا۔

کمٹ رینج: git cherry-pick A..B (A کے بعد B تک کے تمام کمٹ، A کو چھوڑ کر) اور git cherry-pick A^..B (A سے B تک کے تمام کمٹ بشمول)۔ رینجز اس وقت آسان ہوتی ہیں جب آپ کو والد کے تعلق کے بغیر ایک برانچ سے تمام کمٹ منتقل کرنے کی ضرورت ہو — مثال کے طور پر، پرانی برانچ سے نئی برانچ میں مکمل فیچر منتقل کرتے وقت۔

--strategy فلیگ متعین کرتا ہے کہ Git تبدیلیوں کو کیسے لاگو کرے گا۔ بطور ڈیفالٹ recursive حکمت عملی استعمال ہوتی ہے، لیکن آپ تنازع کا رخ خودکار طور پر منتخب کرنے کے لیے ours یا theirs متعین کر سکتے ہیں۔ --mainline فلیگ merge کمٹ پر cherry-pick لاگو کرتے وقت استعمال ہوتا ہے — یہ والد نمبر (1 یا 2) متعین کرتا ہے جس کی نسبت diff کا حساب لگایا جاتا ہے۔

bash
# Cherry-pick کمٹ رینج
git cherry-pick develop~5..develop~2

# Merge کمٹ کو چیری پِک کریں (والد متعین کریں)
git cherry-pick -m 1 m9n0o1p

# theirs حکمت عملی استعمال کریں
git cherry-pick --strategy=recursive \
  --strategy-option=theirs a1b2c3d

# تنازع حل کرنے کے بعد جاری رکھیں
git cherry-pick --continue

Cherry-pick کے دوران تنازعات

Cherry-pick کے دوران تنازعات اس وقت پیدا ہوتے ہیں جب منتقل کیے جانے والے کمٹ کی تبدیلیاں انہی سطروں کو متاثر کرتی ہیں جو ہدف برانچ میں تبدیل کی گئی تھیں۔ Git عمل روک دیتا ہے، تنازع والی فائلوں کو نشان زد کرتا ہے، اور حل کا انتظار کرتا ہے۔ حالت میں، یہ فائلیں both modified کے طور پر دکھائی دیتی ہیں۔

تنازع حل کرنے کے اقدامات: تنازع والی فائل کھولیں، تنازع کے نشانات تلاش کریں (<<<<<<<، =======، >>>>>>>)، مواد میں ترمیم کریں، نشانات ہٹائیں، حل شدہ فائلوں کے لیے git add چلائیں، اور git cherry-pick --continue چلائیں۔ اگر تنازع حل نہیں کیا جا سکتا — git cherry-pick --abort پورے cherry-pick کو منسوخ کر دیتا ہے، برانچ کو اس کی اصل حالت میں واپس کر دیتا ہے۔

ایک عام مسئلہ: کمٹ میں پہلے سے موجود تبدیلیوں کے مساوی تبدیلیاں شامل ہیں۔ اس صورت میں، Git cherry-pick کی کوشش کرتے وقت «nothing to commit» یا «empty commit» رپورٹ کرتا ہے۔ --keep-redundant-commits اور --empty=keep فلیگز Git کو ترتیب برقرار رکھنے کے لیے خالی کمٹ بنانے پر مجبور کرتے ہیں، جبکہ --skip ایسے کمٹ کو چھوڑنے کی اجازت دیتا ہے۔

bash
# Cherry-pick کے دوران تنازع — روکیں
git cherry-pick a1b2c3d
# error: a1b2c3d... کمٹ پیغام لاگو نہیں کیا جا سکا

# تنازع حل کریں → انڈیکس میں شامل کریں
git add src/conflicted_file.swift
git cherry-pick --continue

# خالی کمٹ چھوڑیں (پہلے سے لاگو)
git cherry-pick --skip

# مکمل منسوخی
git cherry-pick --abort

Cherry-pick کے بہترین طریقے

پہلا اصول: ہمیشہ تصدیق کریں کہ منتقل کیا جانے والا کمٹ خود کفیل ہے۔ اگر کمٹ A کا انحصار کمٹ B کی تبدیلیوں پر ہے جو منتقل نہیں کیا جا رہا، تو A پر cherry-pick لاگو کرنے سے بلڈ ٹوٹ سکتا ہے۔ Cherry-pick سے پہلے، git show --stat <hash> کے ذریعے یہ جانچنا مفید ہے کہ کمٹ نے کون سی فائلیں تبدیل کی ہیں۔

دوسرا اصول: cherry-pick کے عمل کو دستاویز کریں۔ -x فلیگ استعمال کریں تاکہ کمٹ پیغام اصل کمٹ کا حوالہ برقرار رکھے۔ یہ بعد میں تاریخ کے تجزیہ کے دوران یہ سمجھنے میں مدد دے گا کہ تبدیلی کہاں سے آئی۔ -x کے بغیر، cherry-pick ایک عام کمٹ کی طرح لگتا ہے، اور اس کی اصل صرف git log --graph کے ذریعے متعین کی جا سکتی ہے۔

تیسرا اصول: ان برانچوں کے درمیان cherry-pick سے بچیں جو بہت زیادہ مختلف ہو گئی ہیں۔ اگر کمٹ بننے کے بعد کافی وقت گزر چکا ہے اور کوڈبیس میں نمایاں تبدیلی آئی ہے، تو تنازعات بے شمار اور پیچیدہ ہوں گے۔ ایسے معاملات میں، ہدف برانچ میں اصلاح کو دوبارہ لاگو کرنا بہتر ہے — درجنوں تنازعات حل کرنے سے کم وقت لگے گا۔

  • Cherry-pick صرف بیرونی انحصار کے بغیر خود کفیل کمٹ۔
  • -x فلیگ پیغام میں کمٹ کی اصل دستاویز کرنے کے لیے لازمی ہے۔
  • بچیں نمایاں کوڈبیس فرق والے پرانے کمٹ پر cherry-pick لاگو کرنے سے۔
  • CI/CD cherry-pick کے بعد بلڈ کی تصدیق کریں: تنازع نہیں ہوا ہوگا، لیکن کوڈ مرتب نہیں ہو سکتا۔
  • PR تبصرہ pull request بناتے وقت بتائیں کہ cherry-pick کے ذریعے کون سے کمٹ منتقل کیے گئے۔

اکثر پوچھے گئے سوالات

کمٹ کو چیری پِک کرنے کا کیا مطلب ہے؟

چیری پِک کرنا کا مطلب ہے git cherry-pick کے ذریعے مخصوص کمٹ کی تبدیلیوں کو موجودہ برانچ پر لاگو کرنا۔ کمانڈ ایک نئی ہیش کے ساتھ نیا کمٹ بناتا ہے۔ اصل کمٹ اپنی برانچ میں unchanged رہتا ہے۔ یہ پوری برانچ کو merge کرنے کا متبادل ہے جب صرف ایک مخصوص کمٹ کی ضرورت ہو۔

merge کی بجائے cherry-pick کب استعمال کریں؟

Cherry-pick اس وقت منتخب کیا جاتا ہے جب آپ کو پوری برانچ منتقل کیے بغیر ایک یا زیادہ مخصوص کمٹ منتقل کرنے کی ضرورت ہو۔ Merge برانچوں کے مکمل انضمام کے لیے استعمال ہوتا ہے۔ ایک عام cherry-pick منظر نامہ ڈویلپمنٹ برانچ سے ریلیز برانچ میں بگ فکس منتقل کرنا ہے جہاں دیگر تبدیلیاں ابھی تیار نہیں ہیں۔

کیا cherry-pick کو واپس لیا جا سکتا ہے؟

مکمل ہونے سے پہلے — git cherry-pick --abort عمل کو مکمل طور پر منسوخ کر دیتا ہے۔ کامیابی سے مکمل ہونے کے بعد — git revert <hash> ایک کمٹ بناتا ہے جو cherry-pick کی تبدیلیوں کو واپس لیتا ہے۔ --abort سے فرق: revert کمٹ کو تاریخ سے نہیں ہٹاتا، بلکہ ایک نیا واپس لینے والا کمٹ بناتا ہے۔

اگر cherry-pick خالی کمٹ بنائے تو کیا کریں؟

خالی کمٹ اس وقت ہوتا ہے جب تبدیلیاں پہلے سے ہدف برانچ میں موجود ہوں۔ ایسے کمٹ کو چھوڑنے کے لیے git cherry-pick --skip استعمال کریں، یا ہیش کی ترتیب برقرار رکھنے کے لیے خالی کمٹ بنانے کے لیے git cherry-pick --keep-redundant-commits استعمال کریں۔

Cherry-pick rebase سے کیسے مختلف ہے؟

Cherry-pick منتخب کمٹ (ایک ایک کر کے یا فہرست کے طور پر) موجودہ برانچ میں منتقل کرتا ہے۔ Rebase ایک برانچ کے تمام کمٹ کو نئی بنیاد پر منتقل کرتا ہے۔ Cherry-pick ماخذ برانچ کو تبدیل نہیں کرتا، rebase تاریخ کو دوبارہ لکھتا ہے۔ Cherry-pick درست لیکن دستی ہے؛ rebase خودکار لیکن عوامی برانچوں کے لیے خطرناک ہے۔

خلاصہ

  • Cherry-pick — تبدیلیوں کو محفوظ رکھتے ہوئے اور نئی ہیش بنا کر برانچوں کے درمیان انفرادی کمٹ منتقل کرنے کا کمانڈ۔
  • اہم منظر نامہ — پوری تاریخ یا نامکمل کوڈ منتقل کیے بغیر ریلیز برانچوں کے درمیان اصلاحات کی منتقلی۔
  • متعدد کمٹ ہیش کی فہرست بنا کر یا A..B رینج استعمال کر کے ایک کمانڈ سے منتقل کیے جاتے ہیں۔
  • تنازعات merge کی طرح حل کیے جاتے ہیں: فائلوں میں ترمیم، git add، git cherry-pick --continue۔
  • -x فلیگ تاریخ کی شفافیت کے لیے پیغام میں اصل کمٹ کا حوالہ شامل کرتا ہے۔
  • واپس لینا مکمل ہونے سے پہلے --abort یا بعد میں git revert کے ذریعے کیا جاتا ہے۔
  • خطرات: منحصر کمٹ اور بہت پرانی تبدیلیوں پر cherry-pick لاگو کرنے سے متعدد تنازعات پیدا ہو سکتے ہیں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں