جابهجایی بین شاخهها — 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 switch | git checkout |
|---|---|---|
| رفتن به شاخه | ✅ | ✅ |
| ساخت + رفتن | -c | -b |
| برگرداندن فایل (خطرناک!) | ❌ نمیکند | ✅ میکند |
| رفتن به کامیت (detached) | فقط با --detach صریح | بیسروصدا! |
| وضعیت | جدید و پیشنهادی | قدیمی اما رایج |
قبل از سوئیچ چه باید کرد؟
اگر تغییرات stage نشده یا کامیت نشده دارید، گیت اجازه سوئیچ نمیدهد (یا تغییرات را با شما میبرد که خطرناک است):
error: Your local changes to the following files would be overwritten by checkout
راهحلها:
- کامیت کنید:
git add . && git commit -m "..." - Stash کنید:
git stash— بعد از سوئیچ باgit stash popبرگردانید - دور بیندازید:
git restore .— ⚠️ تغییرات برای همیشه حذف میشوند!
Detached HEAD چیست؟
اگر بهجای شاخه، به یک کامیت خاص بروید، وارد حالت Detached HEAD میشوید:
git switch --detach a1b2c3d
# یا:
git checkout a1b2c3d
# HEAD is now at a1b2c3d
یعنی: «شما روی هیچ شاخهای نیستید؛ فقط به گذشته نگاه میکنید.»
git switch mainترفند: دیدن شاخه فعلی بدون دستور
خیلی از ترمینالها میتوانند شاخه فعلی را در خط فرمان نشان دهند (مثل Git Bash یا تنظیمات PowerShell). همچنین همیشه میتوانید سریع چک کنید:
git branch
# feature-search
# * main ← ستاره یعنی اینجا هستید
خلاصه
git switch <شاخه>رفتن به شاخه (پیشنهادی)git switch -c <نام>ساخت + رفتن همزمانgit checkoutمعادل قدیمی است و هنوز رایج است- قبل از سوئیچ، تغییرات را کامیت یا stash کنید
- Detached HEAD فقط برای دیدن گذشته است، نه کار
این مبحث بخشی از دوره آموزش کامل Git است.