جابه‌جایی بین شاخه‌ها — git switch و checkout

رفتن به شاخه دیگر با git switch و git checkout، ساخت و سوئیچ هم‌زمان و مفهوم detached HEAD.

جابه‌جایی بین شاخه‌ها

ساختن شاخه کافی نیست — باید بتوانید وارد آن شوید تا کامیت‌هایتان در آن ثبت شود. برای این کار دو دستور داریم: git switch (جدید و پیشنهادی) و git checkout (قدیمی و هنوز رایج).

دستور git switch (پیشنهادی)

# رفتن به شاخه موجود:
git switch feature-search
# Switched to branch 'feature-search'

# ساخت شاخه جدید و رفتن به آن (هم‌زمان):
git switch -c feature-login
# Switched to a new branch 'feature-login'

# برگشتن به main:
git switch main
دستور git switch در نسخه ۲.۲۳ گیت (۲۰۱۹) معرفی شد — مخصوص همین یک کار طراحی شده و امن‌تر است.

دستور git checkout (قدیمی)

قبل از switch، همه از checkout استفاده می‌کردند (و هنوز هم خیلی‌ها استفاده می‌کنند):

# رفتن به شاخه موجود:
git checkout feature-search

# ساخت شاخه جدید و رفتن به آن:
git checkout -b feature-login

# برگشتن به main:
git checkout main

مقایسه switch و checkout

ویژگیgit switchgit checkout
رفتن به شاخه✅✅
ساخت + رفتن-c-b
برگرداندن فایل (خطرناک!)❌ نمی‌کند✅ می‌کند
رفتن به کامیت (detached)فقط با --detach صریحبی‌سروصدا!
وضعیتجدید و پیشنهادیقدیمی اما رایج
چرا switch ساخته شد؟ چون checkout خیلی کار می‌کرد (جابه‌جایی شاخه، برگرداندن فایل، رفتن به کامیت) و این خطرناک بود — ممکن بود بدون اینکه بخواهید تغییراتتان را از بین ببرید! switch فقط و فقط برای جابه‌جایی شاخه است.

قبل از سوئیچ چه باید کرد؟

اگر تغییرات stage نشده یا کامیت نشده دارید، گیت اجازه سوئیچ نمی‌دهد (یا تغییرات را با شما می‌برد که خطرناک است):

error: Your local changes to the following files would be overwritten by checkout

راه‌حل‌ها:

  1. کامیت کنید: git add . && git commit -m "..."
  2. Stash کنید: git stash — بعد از سوئیچ با git stash pop برگردانید
  3. دور بیندازید: git restore . — ⚠️ تغییرات برای همیشه حذف می‌شوند!

Detached HEAD چیست؟

اگر به‌جای شاخه، به یک کامیت خاص بروید، وارد حالت Detached HEAD می‌شوید:

git switch --detach a1b2c3d
# یا:
git checkout a1b2c3d
# HEAD is now at a1b2c3d

یعنی: «شما روی هیچ شاخه‌ای نیستید؛ فقط به گذشته نگاه می‌کنید.»

اگر در حالت detached HEAD کامیت کنید، آن کامیت‌ها به هیچ شاخه‌ای تعلق نمی‌گیرند و ممکن است گم شوند! فقط برای دیدن گذشته استفاده کنید. برای کار، همیشه به یک شاخه بروید: git switch main

ترفند: دیدن شاخه فعلی بدون دستور

خیلی از ترمینال‌ها می‌توانند شاخه فعلی را در خط فرمان نشان دهند (مثل Git Bash یا تنظیمات PowerShell). همچنین همیشه می‌توانید سریع چک کنید:

git branch
#   feature-search
# * main  ← ستاره یعنی اینجا هستید

خلاصه

این مبحث بخشی از دوره آموزش کامل Git است.

ابزارهای مرتبط