روش کاری عملی با برنچهای گیت برای مبتدیها
دیگر همهچیز را روی main کامیت نکنید. یک روش کاری ساده و تیمی با برنچهای فیچر، پول ریکوئست و ادغامِ تمیز یاد بگیرید.
در این صفحه
وقتی تازه گیت را یاد میگیرید، طبیعی است که همهچیز را مستقیم روی main کامیت کنید. این روش جواب میدهد، تا وقتی که مجبور شوید وسط کار روی یک فیچر باگی را درست کنید یا همتیمیتان تغییراتی را پوش کند که با تغییرات شما تداخل دارد.
برنچها (branch) این مشکل را حل میکنند. در این راهنما روش کاری سادهای را یاد میگیرید که تیمهایی در هر اندازه از آن استفاده میکنند: برای هر کار یک برنچ بسازید، آزادانه کامیت کنید و وقتی آماده شد آن را ادغام کنید.
برنچ واقعاً چیست#
برنچ در گیت فقط یک اشارهگر متحرک به یک کامیت است. ساختنش آنی است و تقریباً هزینهای ندارد، چون گیت فایلهایتان را کپی نمیکند. وقتی کامیت جدیدی میسازید، برنچی که روی آن هستید جلو میرود و به کامیت جدید اشاره میکند.
اینجا feature/login بعد از کامیت C از main جدا میشود و دو کامیتِ مخصوص خودش، D و E، را میگیرد. کار روی یک برنچ تا وقتی ادغام نکنید روی برنچ دیگر اثری ندارد؛ ادغام، کامیتِ ادغامِ M را میسازد.
روش کار در یک نگاه#
- برنچ
mainمحلی را بهروز کنید. - یک برنچ فیچر بسازید.
- کارتان را در قدمهای کوچک کامیت کنید.
- برنچ را پوش کنید و یک پول ریکوئست باز کنید.
- برنچ را با
mainبهروز نگه دارید. - ادغام کنید و بعد برنچ را حذف کنید.
بیایید قدمبهقدم جلو برویم.
قدم ۱: از یک main بهروز شروع کنید#
git switch main
git pull origin maingit switch (گیت ۲.۲۳ به بعد) جایگزین مدرنتر و واضحترِ git checkout برای جابهجایی بین برنچهاست.
قدم ۲: یک برنچ فیچر بسازید#
git switch -c feature/login-formفلگ -c برنچ را میسازد و یکجا به آن منتقل میشود. از نامهای توصیفی با پیشوند استفاده کنید تا همه بفهمند هر برنچ برای چیست:
| پیشوند | کاربرد | مثال |
|---|---|---|
feature/ |
قابلیت جدید | feature/login-form |
fix/ |
رفع باگ | fix/password-reset-email |
docs/ |
مستندات | docs/api-examples |
refactor/ |
بهبود کد بدون تغییر رفتار | refactor/user-service |
قدم ۳: در قدمهای کوچک و معنادار کامیت کنید#
تغییری بدهید، مرورش کنید و بعد کامیت کنید:
git status # what changed?
git diff # review the exact changes
git add src/login.js # stage specific files
git commit -m "Add login form markup and validation"پیام کامیت را برای خودِ آیندهتان بنویسید
پیام را کوتاه و به شکل دستوری بنویسید (مثلاً «Add validation»، نه «Added validation») و توضیح دهید چه چیزی و چرا تغییر کرده، نه اینکه چطور. یک آزمون خوب: پیامتان باید این جمله را کامل کند: «If applied, this commit will…»
قدم ۴: پوش کنید و پول ریکوئست باز کنید#
اولین بار که برنچ جدیدی را پوش میکنید، به گیت بگویید کدام برنچِ ریموت را دنبال کند:
git push -u origin feature/login-form-u برنچِ بالادستی (upstream) را تنظیم میکند تا از این به بعد یک git push ساده کافی باشد. حالا در GitHub، GitLab یا Bitbucket پیشنهادی برای باز کردن یک پول ریکوئست (در GitLab به آن merge request میگویند) میبینید. اینجا همتیمیها کدتان را بررسی میکنند، نظر میدهند و تستهای خودکار پیش از رسیدن هر چیزی به main اجرا میشوند.
قدم ۵: برنچ را بهروز نگه دارید#
اگر در حین کار شما main جلو رفت، آن تغییرات را به برنچتان بیاورید تا تداخلها را زود و در تکههای کوچک حل کنید:
git switch main
git pull origin main
git switch feature/login-form
git merge mainبعضی تیمها بهجای git merge main از git rebase main استفاده میکنند که کامیتهای شما را روی آخرین نسخهٔ main بازپخش میکند و تاریخچهای خطی میسازد. هر دو روش درستاند؛ از قرارداد تیمتان پیروی کنید.
هرگز تاریخچهٔ مشترک را rebase نکنید
rebase کامیتها را بازنویسی میکند. فقط برنچهایی را rebase کنید که هیچکس دیگری کارش را روی آنها بنا نکرده است؛ وگرنه برای همتیمیهایتان تداخلهای دردسرساز درست میکنید.
حل کردن تداخل ادغام#
تداخل (conflict) وقتی پیش میآید که دو برنچ خطهای یکسانی را تغییر داده باشند. گیت متوقف میشود و فایل را علامتگذاری میکند:
<<<<<<< HEAD
const MAX_ATTEMPTS = 5;
=======
const MAX_ATTEMPTS = 3;
>>>>>>> mainبخش HEAD نسخهٔ برنچ شماست و بخش پایینی از main میآید. فایل را طوری ویرایش کنید که نسخهٔ درست بماند، نشانهها را پاک کنید و ادغام را تمام کنید:
git add src/config.js
git commitقدم ۶: ادغام و مرتبسازی#
وقتی پول ریکوئست تأیید شد، آن را از طریق پلتفرم میزبانی ادغام کنید. بعد محیط محلی را مرتب کنید:
git switch main
git pull origin main
git branch -d feature/login-formgit branch -d از حذف برنچی که ادغام نشده خودداری میکند، پس گزینهٔ پیشفرض امنی است. اگر تیمتان از squash merge استفاده میکند، ممکن است گیت برنچ را ادغامشده تشخیص ندهد. وقتی مطمئن شدید پول ریکوئست ادغام شده، git branch -D حذف را اجباری میکند.
دستورهای کاربردی برای به خاطر سپردن#
git branch # list local branches
git branch -a # include remote branches
git log --oneline --graph --all # visualise history
git switch - # jump back to the previous branch
git stash # shelve uncommitted changes temporarily
git stash pop # bring them backجمعبندی#
- برنچ یک اشارهگر سبک است، پس آزادانه بسازیدش.
- یک برنچ برای هر فیچر یا رفع باگ،
mainرا همیشه آمادهٔ انتشار نگه میدارد. - در قدمهای کوچک کامیت کنید، پیامهای واضح بنویسید و برای بررسی، پول ریکوئست باز کنید.
mainرا مرتب در برنچتان ادغام کنید تا از تداخلهای بزرگ جلوگیری شود.- بعد از ادغام، برنچها را حذف کنید تا مخزنتان مرتب بماند.
این روش کار را حتی در پروژههای تکنفره هم به کار ببرید. عادتهایی میسازد که پیوستن به یک تیم را آسان میکند.