Feature Branch — Git میں برانچنگ کی ایک تکنیک ہے جس میں ہر نئی خصوصیت کو مرکزی کوڈ سے الگ ایک علیحدہ برانچ میں تیار کیا جاتا ہے۔ یہ متعدد ڈویلپرز کو پروجیکٹ کے مستحکم ورژن کو نقصان پہنچانے کے خطرے کے بغیر مختلف کاموں پر بیک وقت کام کرنے کی اجازت دیتا ہے۔ Atlassian، 2024 کے مطابق، Feature Branch Git Flow کا ایک اہم عنصر ہے اور زیادہ تر تجارتی پروجیکٹس میں استعمال ہوتا ہے۔
اہم نکات
feature/فنکشن-نام۔Feature Branch (فیچر برانچ) Git میں ایک عارضی برانچ ہے جو کسی خاص فعالیت کو تیار کرنے کے لیے develop سے بنائی جاتی ہے۔ طویل عرصے تک رہنے والی main اور develop برانچز کے برعکس، feature برانچز محدود وقت — کچھ گھنٹوں سے کچھ ہفتوں تک — کے لیے موجود رہتی ہیں۔
feature branch کا بنیادی مقصد ایک کام سے متعلق تبدیلیوں کو باقی کوڈ سے الگ کرنا ہے۔ ڈویلپر اپنی برانچ میں تجربہ کر سکتا ہے، متعدد commits کر سکتا ہے اور کوڈ کو توڑ بھی سکتا ہے، ٹیم کے دیگر اراکین کے کام کو متاثر کیے بغیر۔
ڈویلپمنٹ مکمل ہونے کے بعد، feature برانچ کو لازمی کوڈ جائزے کے ساتھ Pull Request کے ذریعے واپس develop میں ضم کر دیا جاتا ہے۔ انضمام کے بعد، ریپوزٹری کو صاف رکھنے کے لیے برانچ کو عام طور پر حذف کر دیا جاتا ہے۔
Vincent Driessen، 2010 کے مطابق، feature برانچز کے ساتھ Git Flow ماڈل مختلف اقسام کی برانچز کے درمیان ذمہ داریوں کی واضح تقسیم کی وجہ سے صنعت کا معیار بن گیا۔
ورک فلو feature branch کے ساتھ ان اقدامات کے سلسلے پر مشتمل ہے جو ڈویلپر ہر نئی خصوصیت کے لیے انجام دیتا ہے۔ یہ عمل انضمام کے تنازعات کو کم سے کم کرتا ہے اور کوڈ کے معیار کو یقینی بناتا ہے۔
develop کے ساتھ وقتاً فوقتاً ہم آہنگی انتہائی اہم ہے۔ feature برانچ جتنی دیر develop سے تبدیلیوں کو ضم کیے بغیر رہتی ہے، حتمی انضمام میں تنازعات کا امکان اتنا ہی زیادہ ہوتا ہے۔
| ہم آہنگی کی تعدد | تنازع کا خطرہ | ڈویلپمنٹ کی سہولت |
|---|---|---|
| روزانہ | کم | بار بار rebase یا merge کی ضرورت |
| ہفتہ وار | درمیانہ | آرام دہ رفتار، معتدل تنازعات |
| ماہانہ | زیادہ | پیچیدہ انضمام تنازع کے حل کا خطرہ |
| کبھی نہیں | سنگین | ڈیٹا کے نقصان کے بغیر انضمام ناممکن ہو سکتا ہے |
برانچ کا نام رکھنا ٹیم کے نظم و ضبط کا ایک اہم حصہ ہے۔ ایک یکساں نام رکھنے کا معیار فوری طور پر یہ شناخت کرنے کی اجازت دیتا ہے کہ کس کام پر کام ہو رہا ہے اور یہ کون کر رہا ہے۔
feature/added-auth-module۔feature/PROJ-42-add-login۔feature/feat/analytics-dashboard۔JIRA، Trello یا کسی اور سسٹم سے کام کا ID استعمال کرنا بہترین عمل ہے۔ یہ خود بخود کوڈ کو کام سے جوڑتا ہے اور git log کے ذریعے برانچ تلاش کرنے کو آسان بناتا ہے۔
Pull Request (یا GitLab میں Merge Request) feature برانچ کو develop میں ضم کرنے کی درخواست ہے۔ PR صرف ایک تکنیکی عمل نہیں ہے، بلکہ ایک ٹیم کوڈ جائزہ کا عمل ہے جو کوڈ کے معیار کو بہتر بناتا ہے اور ٹیم کے اندر علم پھیلاتا ہے۔
ایک اچھے PR میں کام کی مختصر وضاحت کے ساتھ عنوان، ٹکٹ کا لنک اور تبدیلیوں کی وضاحت ہوتی ہے۔ ڈویلپر کو بتانا چاہیے کہ اصل میں کیا کیا گیا، کون سی فائلیں تبدیل کی گئیں اور کیا پروجیکٹ کے دوسرے حصوں کے لیے ممکنہ خطرات ہیں۔
ٹیم PR میں کوڈ کا جائزہ لیتی ہے، تبصرے چھوڑتی ہے، تبدیلیوں کی درخواست کرتی ہے (change requests) اور انضمام کی منظوری دیتی ہے (approve)۔ منظوری کے بعد، merge یا squash merge انجام دیا جاتا ہے۔
موبائل ڈویلپمنٹ میں PR کے جائزے کا اوسط وقت 4 سے 24 گھنٹے تک ہے۔ Danger لائبریری براہ راست PR میں linters اور ٹیسٹ چلا کر کچھ جانچوں کو خودکار کرتی ہے۔
PR کی منظوری کے بعد، feature برانچ کو مختلف طریقوں سے develop میں ضم کیا جا سکتا ہے۔ انضمام کی حکمت عملی کا انتخاب commit کی تاریخ اور تبدیلیوں کو واپس لانے کی صلاحیت کو متاثر کرتا ہے۔
بار بار ریلیز والے موبائل پروجیکٹس کے لیے، عام طور پر squash merge استعمال کیا جاتا ہے: یہ develop میں صاف تاریخ فراہم کرتا ہے، جبکہ ڈویلپمنٹ کی تفصیلات PR کی وضاحت اور ٹریکر کام میں رہتی ہیں۔
تجربہ کار ڈویلپرز بھی feature برانچز کے ساتھ کام کرتے وقت غلطیاں کرتے ہیں۔ عام مسائل کا علم وقت اور ڈیٹا کے ضیاع سے بچنے میں مدد کرتا ہے۔
ان مسائل سے بچنے کا بہترین طریقہ پروجیکٹ کے آغاز میں کام کے قواعد پر متفق ہونا اور CI/CD پائپ لائن میں خودکار جانچوں کا استعمال کرنا ہے۔
ایک عملی منظر نامے پر غور کریں: ایک ڈویلپر موبائل ایپ میں ایک نئی تصدیقی خصوصیت شروع کرتا ہے۔ وہ ایک feature برانچ بناتا ہے، کوڈ پر کام کرتا ہے اور Pull Request کے ساتھ کام مکمل کرتا ہے۔
# develop کو اپ ڈیٹ کریں اور feature برانچ بنائیں
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# فیچر پر کام: commits
git add src/ui/login/
git commit -m "Add login screen layout"
# feature برانچ کو سرور پر push کریں
git push origin feature/add-login-screen
# develop کے ساتھ ہم آہنگ کریں (rebase)
git fetch origin develop
git rebase origin/develop
# PR کی منظوری کے بعد: مقامی develop کو اپ ڈیٹ کریں اور برانچ حذف کریں
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
کمانڈ git branch -d برانچ کو صرف اس وقت حذف کرتی ہے جب اس کی تبدیلیاں مکمل طور پر ضم ہو چکی ہوں۔ اگر برانچ ضم نہیں ہوئی ہے، Git جبری حذف کرنے کے لیے git branch -D استعمال کرنے کا مشورہ دے گا — اس فلیگ کو احتیاط سے استعمال کریں۔
PR بنانے سے پہلے ہر feature برانچ کے لیے CI/CD پائپ لائن چلنی چاہیے۔ یہ کوڈ کے دوسرے ڈویلپرز کے جائزے میں جانے سے پہلے ابتدائی مرحلے میں مسائل کا پتہ لگانے میں مدد کرتا ہے۔
# feature برانچ کی جانچ کے لیے GitHub Actions
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
پائپ لائن جانچتی ہے کہ کوڈ کمپائل ہوتا ہے، ٹیسٹ پاس ہوتے ہیں اور کوڈ کا انداز ٹیم کے معیارات پر پورا اترتا ہے۔ تمام جانچیں پاس کرنے کے بعد ہی Pull Request بنایا جا سکتا ہے۔
اکثر پوچھے گئے سوالات
ہاں، یہ ایک معیاری عمل ہے۔ ہر ڈویلپر اپنی feature برانچ میں کام کر سکتا ہے، اور وہ سب develop کے ساتھ آزادانہ طور پر ہم آہنگ ہوتی ہیں۔ بنیادی اصول — کوڈ میں cross-task انحصار سے بچنے کے لیے ایک کام کے لیے ایک برانچ۔
اپنی feature برانچ پر git rebase origin/develop چلائیں۔ اگر تنازعات پیدا ہوتے ہیں — انہیں ایک ایک کرکے حل کریں، commits develop کی تازہ ترین حالت کے اوپر دوبارہ لکھے جائیں گے۔ Rebase کے بعد، ریموٹ برانچ کو اپ ڈیٹ کرنے کے لیے git push --force کی ضرورت ہوگی۔
اگر کام منسوخ کر دیا گیا ہے، تو feature برانچ کو صرف حذف کیا جا سکتا ہے۔ مقامی برانچ کے لیے git branch -d feature/name اور ریموٹ کے لیے git push origin --delete feature/name چلائیں۔ تمام غیر commit شدہ تبدیلیاں ضائع ہو جائیں گی۔
بنیادی طور پر یہ ایک ہی چیز ہے۔ مختلف ٹیمیں مختلف سابقے استعمال کرتی ہیں: feature/، task/، feat/۔ Git میکینکس میں کوئی فرق نہیں ہے — یہ سب علیحدہ ڈویلپمنٹ کے لیے develop سے بنائی گئی عارضی برانچز ہیں۔
ہاں، یہ ایک لازمی عمل ہے۔ انضمام کے بعد برانچیں حوالوں کی فہرست کو بے ترتیب کرتی ہیں اور الجھن کا سبب بن سکتی ہیں۔ زیادہ تر پلیٹ فارمز (GitHub، GitLab) PR کے merge کے فوراً بعد برانچ حذف کرنے کی پیشکش کرتے ہیں، اور مقامی برانچیں git branch -d کمانڈ سے حذف کی جاتی ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں