تفاوت git switch و git checkout در مدیریت شاخه‌ها
آموزش

تفاوت git switch و git checkout در مدیریت شاخه‌ها

دستور git switch از نسخه Git 2.23 برای تفکیک وظایف تغییر شاخه از دستکاری فایل‌ها معرفی شد تا خطاهای رایج کار با git checkout کاهش یابد.

تحریریه‌ی دینا کد
نویسنده
۵ دقیقه مطالعه۰ بازدید
اشتراک گذاری۰
فهرست مطالب
  1. ۱چرا دستور git switch معرفی شد
  2. ۲مقایسه دستورهای پرکاربرد
  3. ۳یک سناریوی عملی در ترمینال
  4. ۴اشتباه رایج برنامه‌نویسان
  5. ۵قدم بعدی برای تسلط بر شاخه‌بندی

اگر هنگام جابه‌جایی میان شاخه‌ها تصادفاً نام فایلی را به اشتباه وارد کرده باشید، احتمالاً دیده‌اید که git checkout بدون هیچ هشداری تغییرات ثبت‌نشده آن فایل را حذف می‌کند. این رفتار پیش‌بینی‌نشده سال‌ها برنامه‌نویسان را سردرگم می‌کرد؛ زیرا یک دستور واحد هم برای جابه‌جایی بین شاخه‌ها و هم برای برگرداندن تغییرات فایل‌ها استفاده می‌شد.

توسعه‌دهندگان گیت در نسخه Git 2.23 این مشکل را با معرفی دو دستور اختصاصی حل کردند: git switch برای مدیریت و جابه‌جایی شاخه‌ها، و git restore برای بازگردانی فایل‌ها.

چرا دستور git switch معرفی شد

دستور قدیمی git checkout چندین وظیفه کاملاً متفاوت را به دوش می‌کشید:

  • تغییر شاخه جاری
  • ایجاد شاخه جدید همراه با تغییر به آن
  • برگرداندن فایل‌ها به وضعیت آخرین کامیت
  • جابه‌جایی موقت به یک کامیت خاص و ایجاد وضعیت سر جداشده (Detached HEAD)

این تمرکز بیش از حد روی یک دستور باعث می‌شد اگر شاخه‌ای هم‌نام با یک فایل محلی وجود داشت، گیت پیام ابهام صادر کند یا رفتار غیرمنتظره‌ای نشان دهد. برای رفع این تداخل، تیم گیت git switch را با دایره وظایفی مشخص و محدود به شاخه‌ها به هسته ابزار اضافه کرد.

قانون اصلی ساده است؛ هر جا هدف تغییر شاخه یا ساخت شاخه است، از git switch استفاده می‌کنید و برای تغییر فایل‌ها سراغ git restore می‌روید.

مقایسه دستورهای پرکاربرد

برای درک بهتر تفاوت این دو ابزار، معادل‌های روزمره آن‌ها را در قالب دستورهای متداول بررسی می‌کنیم:

  • جابه‌جایی به شاخه موجود: به جای git checkout main اکنون می‌نویسید git switch main.
  • ساخت شاخه جدید و ورود به آن: به جای git checkout -b feature از فرمان git switch -c feature استفاده می‌کنید (حرف c مخفف create است).
  • بازگشت به شاخه قبلی: هر دو دستور با علامت منفی کار می‌کنند، اما git switch - ایمن‌تر است.
  • ساخت اجباری شاخه: معادل پرچم -B در دستور قدیمی، در دستور جدید پرچم -C در قالب git switch -C feature است.

یک سناریوی عملی در ترمینال

فرض کنید می‌خواهید از شاخه main یک شاخه جدید به نام login-api بسازید، تغییراتی اعمال کنید و سپس به شاخه قبلی برگردید:

bash# بررسی شاخه جاری
git status
# On branch main

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

# بازگشت سریع به شاخه قبلی با علامت خط تیره
git switch -
# Switched to branch 'main'

اگر شاخه روی مخزن ریموت (مانند origin/bugfix) وجود داشته باشد اما هنوز روی سیستم شما نباشد، گیت به شکل خودکار وضعیت را حدس می‌زند. کافی است بنویسید:

bashgit switch bugfix
# Branch 'bugfix' set up to track remote branch 'bugfix' from 'origin'.
# Switched to a new branch 'bugfix'

در این حالت گیت شاخه محلی را ساخته و ارتباط بالادستی آن را با ریموت برقرار می‌کند.

اشتباه رایج برنامه‌نویسان

بزرگ‌ترین خطایی که توسعه‌دهندگان مرتکب می‌شوند، تلاش برای بازگرداندن تغییرات یک فایل با دستور switch است:

bash# این دستور خطاست و اجرا نمی‌شود
git switch app.js
# fatal: invalid reference: app.js

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

bash# شکل درست برگرداندن فایل به وضعیت کامیت قبلی
git restore app.js

همچنین اگر تغییراتی در شاخه فعلی داشته باشید که با شاخه مقصد تداخل ایجاد کند، git switch به شکل پیش‌فرض عملیات را لغو می‌کند تا کدهای محلی بازنویسی نشوند.

قدم بعدی برای تسلط بر شاخه‌بندی

استفاده از git switch خوانایی اسکریپت‌ها و دستورهای روزمره شما را بالاتر می‌برد و ضریب اشتباه در پروژه‌های تیمی را به حداقل می‌رساند. برای آشنایی عمیق با سناریوهای تداخل، بازنویسی تاریخچه و ابزارهای پیشرفته شاخه‌بندی، دوره گیت و گیت‌هاب تعاملی در دیناکد مسیر کاملی را در اختیارتان می‌گذارد.

تحریریه‌ی دینا کد
نویسنده

نظرها

اولین نفری باشید که نظر می‌دهد
برای ثبت نظر وارد شوید

سؤالتان را بپرسید یا تجربه‌تان را بنویسید تا نویسنده‌ی مطلب پاسخ بدهد.

مطالب مرتبط

از همین دسته
دستور stash در گیت چیست و چه کاربردی دارد
آموزش

دستور stash در گیت چیست و چه کاربردی دارد

دستور stash در گیت تغییرات ثبت‌نشده شاخه کاری را موقتا کنار می‌گذارد تا بدون ثبت کامیت ناقص بتوانید روی وظایف فوری کار کنید.

تحریریه‌ی دینا کد۶ دقیقه
diff در گیت چیست و چه‌وقت استفاده می‌شود؟
آموزش

diff در گیت چیست و چه‌وقت استفاده می‌شود؟

git diff دو نسخه از کدها را کنار هم می‌گذارد و خط‌به‌خط نشان می‌دهد چه چیزی عوض شده. یک نگاه به diff قبل از هر add و commit کافی است

تحریریه‌ی دینا کد۷ دقیقه