Git 2026

فصل ۶ · شاخه‌ها

شاخه‌ها — اشاره‌گر، نه کپی

شاخه کپی پروژه نیست. یک فایل کوچک داخل .git/refs/heads/ است که فقط هش یک کامیت را نگه می‌دارد (حدود ۴۰ کاراکتر). ساختن شاخه یعنی نوشتن همین فایل.

🎯 اهداف یادگیری

  • شاخه را به‌عنوان اشاره‌گر به یک commit توضیح دهی
  • با switch و switch -c کار کنی
  • HEAD detached را تشخیص و نجات دهی
  • قرارداد نام‌گذاری تیم را رعایت کنی

🧠 شاخه چیست؟

مسیر refs/heads/main فقط هش کامیت نوک شاخه را نگه می‌دارد. ساخت شاخه = نوشتن یک فایل جدید با یک هش. عوض کردن شاخه = عوض کردن اینکه HEAD به کدام فایل اشاره کند.

شاخه به‌عنوان اشاره‌گر روی DAG

شکل ۴ — HEAD به شاخه اشاره می‌کند؛ شاخه به کامیت. وقتی کامیت می‌کنی، هر دو جلو می‌روند.

اشاره‌گرها را ببین
git branch -vv                 # شاخه‌های محلی + tracking
git show-ref --heads
cat .git/HEAD                  # ref: refs/heads/main

🔀 ساخت و تعویض — مسیر مدرن

🖥️ VS Code Git
  1. روی نام شاخه در نوار وضعیت (پایین-چپ) کلیک کن
  2. Create new branch from... → feat/auth
  3. برای برگشت: همان منو → main
  4. Palette: Git: Create Branch / Git: Checkout to...
  5. Publish Branch وقتی آمادهٔ remote شدی
⌨️ Terminal

git switch -c feat/auth

git switch main

git switch -

git branch -d feat/auth فقط اگر merge شده؛ وگرنه Git رد می‌کند.

git branch -D feat/old حذف اجباری

انتخاب شاخه در نوار وضعیت VS Code

شکل ۴ب — کلیک روی نام شاخه در نوار وضعیت: تعویض، ساخت شاخهٔ جدید، Publish.

ساخت شاخه از Command Palette

شکل ۴پ — Ctrl+Shift+P سپس Git: Create Branch from... معادل git switch -c.

چرا دیگر checkout نه؟

checkout هم شاخه عوض می‌کرد هم فایل برمی‌گرداند. دو معنا = دو برابر باگ انسانی. از Git ۲.۵۱ فرمان‌های switch و restore پایدار و توصیه‌شده‌اند.

📛 نام‌گذاری

پیشوند استفاده مثال
feat/ قابلیت جدید feat/jwt-refresh
fix/ باگ fix/token-expiry
chore/ ابزار / وابستگی chore/bump-actions
hotfix/ تعمیر تولید hotfix/500-login
release/ آماده‌سازی نسخه release/1.4.0

از فاصله، اموجی و نام‌های خیلی کلی (update, ali) پرهیز کن. GitHub شاخه را در URL می‌گذارد.

🪂 HEAD detached — وحشت بی‌مورد

وقتی مستقیم روی یک کامیت checkout/switch کنی (نه روی شاخه)، HEAD به هش می‌چسبد نه به ref.

نجات کارهای detached
git switch --detach HEAD~3     # حداقل ۴ کامیت لازم است
git switch -c rescue
git switch main

در VS Code اگر Graph را بزنی و یک کامیت قدیمی را Checkout کنی، بنر زرد detached HEAD می‌آید. فوری شاخه بساز.

شاخهٔ منتشرشده را بازنویسی نکن

main و شاخه‌هایی که دیگران track می‌کنند مقدس‌اند. بازنویسی یعنی force-push و درد تیم. قانون را در فصل ۲۳ با گوشت و پوست حس می‌کنی.

🌳 دیدن همه چیز

نقشه
git branch -a                  # محلی + remote
git log --oneline --graph --decorate --all

در VS Code افزونهٔ Graph همین نقشه را رنگی می‌کشد — فصل ۱۱ کامل روی آن کار می‌کنیم.

سؤالات مصاحبه (با پاسخ)

Junior — ساخت شاخه فایل‌ها را کپی می‌کند؟ خیر. فقط یک اشاره‌گر جدید.

Mid — تفاوت branch و tag؟ هر دو اشاره‌گرند؛ شاخه با هر commit حرکت می‌کند، تگ معمولاً ثابت می‌ماند.

Senior — HEAD symbolic چیست؟ فایل HEAD معمولاً ref: refs/heads/main است نه خود هش. Detached یعنی HEAD مستقیم هش را نگه می‌دارد.

✅ چک‌لیست فهم

  • شاخه را فایل اشاره‌گر می‌دانی نه پوشه
  • switch -c را به‌جای checkout استفاده می‌کنی
  • از detached بدون وحشت خارج می‌شوی
  • نام شاخه Conventional است

فصل بعد: ادغام — وقتی دو تاریخچه باید یکی شوند.

فصل ۶ از ۳۶ · مرجع جامع و حرفه‌ای Git و GitHub · ویرایش 1.0.0