Main Branch (پہلے Master) Git کی مرکزی شاخ ہے جس میں مستحکم پروڈکشن کوڈ ہوتا ہے جو ڈپلائمنٹ کے لیے تیار ہے۔ main میں ہر کمٹ پروجیکٹ کے ریلیز ورژن سے مطابقت رکھتا ہے، اور شاخ خود براہ راست تبدیلیوں سے محفوظ ہوتی ہے اور پوری ٹیم کے لیے سچائی کا واحد ذریعہ ہوتی ہے۔ GitHub، 2020 کے مطابق، اکتوبر 2020 سے ڈیفالٹ نئی شاخ کو master کی بجائے main کہا جاتا ہے۔
اہم نکات
Main Branch (یا Master — ذخیرہ کی ترتیبات پر منحصر) ڈیفالٹ شاخ ہے جو کسی بھی Git ذخیرہ کو شروع کرتے وقت بنائی جاتی ہے۔ یہ پروجیکٹ کی مرکزی شاخ ہے اور اس میں کوڈ ہوتا ہے جو پروڈکشن میں ڈپلائے کرنے کے لیے تیار ہے۔
develop کے برعکس، جہاں نئی خصوصیات کے ساتھ روزانہ کا کام جاری رہتا ہے، main پروجیکٹ کا شوکیس ہے۔ main میں کوڈ کا ہر ورژن ایک مکمل چکر سے گزرا ہے: feature شاخ میں ڈویلپمنٹ، develop میں انضمام، release شاخ میں ریلیز کی تیاری اور حتمی جانچ۔ اس کے بعد ہی تبدیلیاں main تک پہنچتی ہیں۔
اہم اصول: main ہمیشہ مستحکم ہونا چاہیے۔ اگر main میں کوئی خرابی پائی جاتی ہے، تو اس کا مطلب ہے کہ فوری hotfix کی ضرورت ہے۔ لہذا، پیشہ ورانہ پروجیکٹس میں، main کو شاخ کے تحفظ کے قواعد کے ذریعے حادثاتی تبدیلیوں سے بچایا جاتا ہے۔
Git Book کے مطابق، main منفرد خصوصیات والی کوئی خاص شاخ نہیں ہے، بلکہ ایک کمٹ کا عام حوالہ ہے جسے روایت کے مطابق مرکزی سمجھا جاتا ہے۔ Git نظام کی سطح پر main اور کسی بھی دوسری شاخ میں فرق نہیں کرتا۔
تاریخی طور پر، Git میں ڈیفالٹ شاخ کو master کہا جاتا تھا۔ جون 2020 میں، Black Lives Matter تحریک نے IT صنعت میں master اور slave کی اصطلاحات کی طرف توجہ مبذول کرائی۔ GitHub نے ڈیفالٹ شاخ کے لیے main کی اصطلاح میں منتقلی کا اعلان کیا۔
اکتوبر 2020 سے، GitHub پر تمام نئے ذخیرے main شاخ کے ساتھ بنائے جاتے ہیں۔ GitLab اور Bitbucket نے بھی ڈیفالٹ نام کے طور پر main کے لیے حمایت نافذ کی۔ Git 2.28 (جولائی 2020) نے ڈیفالٹ شاخ کا نام ترتیب دینے کے لیے init.defaultBranch آپشن شامل کیا۔
تکنیکی طور پر، موجودہ شاخ کا نام master سے main میں تبدیل کرنا ایک سادہ عمل ہے۔ اہم چیلنج CI/CD کنفیگریشنز، دستاویزات اور ڈویلپرز کے مقامی ذخیروں میں تمام حوالوں کو اپ ڈیٹ کرنا ہے۔
موجودہ ذخیرے میں شاخ کا نام تبدیل کرنے کے لیے، چلائیں:
# مقامی طور پر master کا نام main رکھنا
git branch -m master main
# ریموٹ ذخیرہ اپ ڈیٹ کرنا
git push -u origin main
# سرور پر پرانے master کو حذف کرنا
git push origin --delete master
# سرور پر HEAD اپ ڈیٹ کرنا
# (GitHub ویب انٹرفیس کے ذریعے: Settings → Branches → Default branch)
Git Flow اور GitHub Flow main شاخ کے کردار کو مختلف طریقے سے متعین کرتے ہیں۔ ماڈل کا انتخاب ٹیم کے سائز، ریلیز کی تعدد اور کوڈ کے استحکام کی ضروریات پر منحصر ہے۔
| خصوصیت | Git Flow | GitHub Flow |
|---|---|---|
| main کا کردار | صرف ریلیز ورژن | مرکزی ڈویلپمنٹ شاخ |
| اضافی شاخیں | Develop, Release, Hotfix | صرف feature شاخیں |
| ریلیز کی تعدد | ہر 1-4 ہفتے | دن میں کئی بار |
| پیچیدگی | اعلی | کم |
| کب منتخب کریں | ریلیز سائیکل والی موبائل ایپس | مسلسل ڈپلائمنٹ والی ویب سروسز |
موبائل ڈویلپمنٹ کے لیے، Git Flow معیار ہے، کیونکہ App Store اور Google Play پر ایپ شائع کرنے کے مقررہ ریلیز سائیکل ہوتے ہیں۔ GitHub Flow ان ویب پروجیکٹس کے لیے زیادہ موزوں ہے جنہیں دن میں کئی بار ڈپلائے کیا جا سکتا ہے۔
GitHub Flow میں، کوئی develop شاخ نہیں ہے۔ تمام feature شاخیں براہ راست main سے بنائی جاتی ہیں، اور مکمل ہونے کے بعد Pull Request کے ذریعے واپس ضم کر دی جاتی ہیں۔ main میں ہر انضمام خود بخود پروڈکشن میں ڈپلائمنٹ کو متحرک کرتا ہے۔ اس ماڈل کے لیے اعلی سطح کی جانچ آٹومیشن اور ٹیم کے نظم و ضبط کی ضرورت ہوتی ہے۔
GitHub Flow میں، کوئی develop شاخ نہیں ہے۔ تمام feature شاخیں براہ راست main سے بنائی جاتی ہیں، اور مکمل ہونے کے بعد Pull Request کے ذریعے واپس ضم کر دی جاتی ہیں۔ main میں ہر انضمام خود بخود پروڈکشن میں ڈپلائمنٹ کو متحرک کرتا ہے۔ اس ماڈل کے لیے اعلی سطح کی جانچ آٹومیشن اور ٹیم کے نظم و ضبط کی ضرورت ہوتی ہے۔
main کے لیے شاخ کا تحفظ کسی بھی تجارتی پروجیکٹ میں لازمی ترتیب ہے۔ اس کے بغیر، ایک حادثاتی push نامکمل کوڈ پروڈکشن میں بھیج سکتا ہے یا تمام صارفین کے لیے کام کرنے والی ایپلیکیشن کو توڑ سکتا ہے۔
تمام چھ قواعد کو ترتیب دینا 10,000+ صارفین والے موبائل پروجیکٹس کے لیے معیار ہے۔ چھوٹے پروجیکٹس کے لیے، پہلے تین قواعد کافی ہیں۔
main کے تحفظ کی سطح پروجیکٹ کے پیمانے پر منحصر ہے۔ ایک سٹارٹ اپ کم سے کم تحفظ کے ساتھ چل سکتا ہے، جبکہ انٹرپرائز ایپلیکیشن کو زیادہ سے زیادہ پابندیوں کی ضرورت ہوتی ہے۔
ٹیگنگ main میں مخصوص کمٹ کے نامزد حوالے بنانے کا عمل ہے۔ ہر ٹیگ پروڈکشن میں جاری کردہ ایپلیکیشن کے ایک ورژن سے مطابقت رکھتا ہے۔ یہ ڈیبگنگ یا پیچ کے لیے کسی بھی پچھلی ریلیز پر فوری سوئچ کرنے کی اجازت دیتا ہے۔
موبائل ڈویلپمنٹ میں ٹیگ کے نام رکھنے کا معیار SemVer (سیمنٹک ورژننگ) ہے: v1.2.3، جہاں پہلا نمبر میجر ورژن (تبدیلیاں توڑنے والی)، دوسرا مائنر ورژن (نئی خصوصیات)، اور تیسرا پیچ (اصلاحات) ہے۔
release شاخ کو main میں ضم کرنے کے بعد ایک ٹیگ بنایا جاتا ہے۔ پھر اس کمٹ کو CI/CD میں بنایا جاتا ہے، دستخط کیا جاتا ہے اور ایپ اسٹور کو بھیجا جاتا ہے۔ اگر ٹیگ میں کوئی خرابی پائی جاتی ہے، تو اس ٹیگ سے hotfix شاخ بنائی جاتی ہے۔
# تشریح شدہ ریلیز ٹیگ بنانا
git tag -a v2.4.1 -m "Release version 2.4.1"
# سرور کو ٹیگ بھیجنا
git push origin v2.4.1
# ذخیرے میں تمام ٹیگز دیکھنا
git tag -l "v2.*"
# کسی مخصوص ٹیگ سے hotfix شاخ بنانا
git checkout -b hotfix/crash-fix v2.4.1
Git Flow میں شاخ کے درجہ بندی کو سمجھنا باہمی تعاون سے ڈویلپمنٹ کو صحیح طریقے سے منظم کرنے کی بنیاد ہے۔ ہر شاخ کی قسم کا اپنا ماخذ، مقصد اور انضمام کے قواعد ہوتے ہیں۔
اہم قاعدہ: feature کبھی براہ راست main میں ضم نہیں ہوتی۔ feature → develop → release → main صحیح انضمام کا سلسلہ ہے۔ اس قاعدے کی خلاف ورزی پورے Git Flow ماڈل کے مقصد کو ختم کر دیتی ہے۔
ایک منظر نامے پر غور کریں: ٹیم نے ریلیز v2.5.0 کی تیاری مکمل کر لی ہے۔ release شاخ کا جائزہ لیا جا چکا ہے اور یہ main میں ضم ہونے کے لیے تیار ہے۔ انضمام کے بعد، ایک ٹیگ بنایا جاتا ہے اور ریلیز شائع کی جاتی ہے۔
# main پر سوئچ کرنا اور اپ ڈیٹ کرنا
git checkout main
git pull origin main
# تصدیق شدہ release شاخ کو ضم کرنا
git merge --no-ff release/2.5.0
# ریلیز ٹیگ بنانا
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"
# main اور ٹیگ سرور کو بھیجنا
git push origin main --tags
--no-ff جھنڈا (کوئی تیز آگے نہیں) انضمام کمٹ بنانے کی ضمانت دیتا ہے، چاہے انضمام صرف پوائنٹر کو ہلا کر کیا جا سکتا ہو۔ یہ معلومات محفوظ رکھتا ہے کہ تبدیلیاں release شاخ سے آئی ہیں، جس سے تاریخ کا تجزیہ آسان ہو جاتا ہے۔
اگر پروڈکشن میں کوئی اہم خرابی دریافت ہوتی ہے، تو عمل عام ریلیز سے مختلف ہوتا ہے۔ Hotfix main سے بنائی جاتی ہے، اور اصلاح کے بعد، اسے main اور develop دونوں میں ضم کیا جاتا ہے۔
اگر پروڈکشن میں کوئی اہم خرابی دریافت ہوتی ہے، تو عمل عام ریلیز سے مختلف ہوتا ہے۔ Hotfix main سے بنائی جاتی ہے، اور اصلاح کے بعد، اسے main اور develop دونوں میں ضم کیا جاتا ہے۔
# main سے hotfix شاخ بنانا
git checkout main
git checkout -b hotfix/2.5.1-crash-fix
# اصلاح اور کمٹ کرنا
git add src/fix/
git commit -m "Fix crash on login screen"
# hotfix کو واپس main میں ضم کرنا
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags
# hotfix کو develop میں بھی ضم کرنا
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop
# hotfix شاخ حذف کرنا
git branch -d hotfix/2.5.1-crash-fix
اکثر پوچھے گئے سوالات
تکنیکی طور پر — ہاں، یہ ایک کمٹ کا عام حوالہ ہے۔ لیکن عملی طور پر — نہیں، کیونکہ main ڈیفالٹ شاخ ہے اور زیادہ تر پلیٹ فارم ڈیفالٹ شاخ کے طور پر سیٹ شاخ کو حذف کرنے کی اجازت نہیں دیتے۔ حذف کرنے کے بجائے، ایک نئی ڈیفالٹ شاخ بنائیں اور پھر پرانی کو حذف کریں۔
اگر خرابی اہم نہیں ہے، تو عام عمل استعمال کریں: develop سے ایک feature شاخ بنائیں، خرابی ٹھیک کریں، کوڈ کا جائزہ لیں اور اگلے ریلیز سائیکل کا انتظار کریں۔ Hotfix صرف ان اہم خرابیوں کے لیے استعمال ہوتی ہے جو صارفین کے کام کو روکتی ہیں۔
main آپ کے کمپیوٹر پر ایک مقامی شاخ ہے۔ origin/main سرور پر ریموٹ شاخ کی حالت کا مقامی کیش ہے۔ git fetch کمانڈ origin/main کو اپ ڈیٹ کرتا ہے، جبکہ git pull فوری طور پر تبدیلیوں کو آپ کی مقامی main میں ضم کرتا ہے۔
پورے ذخیرے کو نئی ڈائریکٹری میں کاپی کرنے کے لیے git clone استعمال کریں۔ اگر ریموٹ URL تبدیل کرنے کی ضرورت ہو، تو git remote set-url origin چلائیں۔ ذخیرے کو کاپی کیے بغیر ورکنگ ڈائریکٹری تبدیل کرنے کے لیے، git worktree add استعمال کریں۔
ہاں، دو افراد کی ٹیم میں بھی main کا تحفظ جائز ہے۔ غلط کمانڈ کے ساتھ حادثاتی push تاریخ کو اوور رائٹ کر سکتا ہے۔ کم سے کم تحفظ — براہ راست push پر پابندی اور PR کی ضرورت — سیٹ اپ میں 5 منٹ لگتے ہیں اور ڈیٹا ریکوری کے گھنٹوں کو روکتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں