گیتمبتدی

روش کاری عملی با برنچ‌های گیت برای مبتدی‌ها

دیگر همه‌چیز را روی main کامیت نکنید. یک روش کاری ساده و تیمی با برنچ‌های فیچر، پول ریکوئست و ادغامِ تمیز یاد بگیرید.

یک برنچ فیچر که از برنچ اصلی جدا می‌شود و دوباره در آن ادغام می‌شود
در این صفحه

وقتی تازه گیت را یاد می‌گیرید، طبیعی است که همه‌چیز را مستقیم روی main کامیت کنید. این روش جواب می‌دهد، تا وقتی که مجبور شوید وسط کار روی یک فیچر باگی را درست کنید یا هم‌تیمی‌تان تغییراتی را پوش کند که با تغییرات شما تداخل دارد.

برنچ‌ها (branch) این مشکل را حل می‌کنند. در این راهنما روش کاری ساده‌ای را یاد می‌گیرید که تیم‌هایی در هر اندازه از آن استفاده می‌کنند: برای هر کار یک برنچ بسازید، آزادانه کامیت کنید و وقتی آماده شد آن را ادغام کنید.

برنچ واقعاً چیست#

برنچ در گیت فقط یک اشاره‌گر متحرک به یک کامیت است. ساختنش آنی است و تقریباً هزینه‌ای ندارد، چون گیت فایل‌هایتان را کپی نمی‌کند. وقتی کامیت جدیدی می‌سازید، برنچی که روی آن هستید جلو می‌رود و به کامیت جدید اشاره می‌کند.

ABCDEMF main feature/login git switch -c ⁧کامیت ادغام⁩
یک برنچ فیچر از main جدا می‌شود، کامیت‌های خودش را می‌گیرد و دوباره ادغام می‌شود

این‌جا feature/login بعد از کامیت C از main جدا می‌شود و دو کامیتِ مخصوص خودش، D و E، را می‌گیرد. کار روی یک برنچ تا وقتی ادغام نکنید روی برنچ دیگر اثری ندارد؛ ادغام، کامیتِ ادغامِ M را می‌سازد.

روش کار در یک نگاه#

  1. برنچ main محلی را به‌روز کنید.
  2. یک برنچ فیچر بسازید.
  3. کارتان را در قدم‌های کوچک کامیت کنید.
  4. برنچ را پوش کنید و یک پول ریکوئست باز کنید.
  5. برنچ را با main به‌روز نگه دارید.
  6. ادغام کنید و بعد برنچ را حذف کنید.

بیایید قدم‌به‌قدم جلو برویم.

قدم ۱: از یک main به‌روز شروع کنید#

Bash
git switch main
git pull origin main

git switch (گیت ۲.۲۳ به بعد) جایگزین مدرن‌تر و واضح‌ترِ git checkout برای جابه‌جایی بین برنچ‌هاست.

قدم ۲: یک برنچ فیچر بسازید#

Bash
git switch -c feature/login-form

فلگ -c برنچ را می‌سازد و یک‌جا به آن منتقل می‌شود. از نام‌های توصیفی با پیشوند استفاده کنید تا همه بفهمند هر برنچ برای چیست:

پیشوند کاربرد مثال
feature/ قابلیت جدید feature/login-form
fix/ رفع باگ fix/password-reset-email
docs/ مستندات docs/api-examples
refactor/ بهبود کد بدون تغییر رفتار refactor/user-service

قدم ۳: در قدم‌های کوچک و معنادار کامیت کنید#

تغییری بدهید، مرورش کنید و بعد کامیت کنید:

Bash
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…»

قدم ۴: پوش کنید و پول ریکوئست باز کنید#

اولین بار که برنچ جدیدی را پوش می‌کنید، به گیت بگویید کدام برنچِ ریموت را دنبال کند:

Bash
git push -u origin feature/login-form

-u برنچِ بالادستی (upstream) را تنظیم می‌کند تا از این به بعد یک git push ساده کافی باشد. حالا در GitHub، GitLab یا Bitbucket پیشنهادی برای باز کردن یک پول ریکوئست (در GitLab به آن merge request می‌گویند) می‌بینید. این‌جا هم‌تیمی‌ها کدتان را بررسی می‌کنند، نظر می‌دهند و تست‌های خودکار پیش از رسیدن هر چیزی به main اجرا می‌شوند.

قدم ۵: برنچ را به‌روز نگه دارید#

اگر در حین کار شما main جلو رفت، آن تغییرات را به برنچتان بیاورید تا تداخل‌ها را زود و در تکه‌های کوچک حل کنید:

Bash
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) وقتی پیش می‌آید که دو برنچ خط‌های یکسانی را تغییر داده باشند. گیت متوقف می‌شود و فایل را علامت‌گذاری می‌کند:

Text
<<<<<<< HEAD
const MAX_ATTEMPTS = 5;
=======
const MAX_ATTEMPTS = 3;
>>>>>>> main

بخش HEAD نسخهٔ برنچ شماست و بخش پایینی از main می‌آید. فایل را طوری ویرایش کنید که نسخهٔ درست بماند، نشانه‌ها را پاک کنید و ادغام را تمام کنید:

Bash
git add src/config.js
git commit

قدم ۶: ادغام و مرتب‌سازی#

وقتی پول ریکوئست تأیید شد، آن را از طریق پلتفرم میزبانی ادغام کنید. بعد محیط محلی را مرتب کنید:

Bash
git switch main
git pull origin main
git branch -d feature/login-form

git branch -d از حذف برنچی که ادغام نشده خودداری می‌کند، پس گزینهٔ پیش‌فرض امنی است. اگر تیمتان از squash merge استفاده می‌کند، ممکن است گیت برنچ را ادغام‌شده تشخیص ندهد. وقتی مطمئن شدید پول ریکوئست ادغام شده، git branch -D حذف را اجباری می‌کند.

دستورهای کاربردی برای به خاطر سپردن#

Bash
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 را مرتب در برنچتان ادغام کنید تا از تداخل‌های بزرگ جلوگیری شود.
  • بعد از ادغام، برنچ‌ها را حذف کنید تا مخزنتان مرتب بماند.

این روش کار را حتی در پروژه‌های تک‌نفره هم به کار ببرید. عادت‌هایی می‌سازد که پیوستن به یک تیم را آسان می‌کند.