| GIT-SWITCH(1) | Git Manual | GIT-SWITCH(1) |
نام (NAME)
git-switch - جابهجایی میان شاخهها
خلاصه دستور (SYNOPSIS)
git switch [<options>] [--no-guess] <branch> git switch [<options>] --detach [<start-point>] git switch [<options>] (-c|-C) <new-branch> [<start-point>] git switch [<options>] --orphan <new-branch>
توضیحات (DESCRIPTION)
جابهجایی به یک شاخهٔ مشخصشده. درخت کاری (working tree) و نمایه (index) بهروزرسانی میشوند تا با شاخه مطابقت داشته باشند. تمامی کامیتهای جدید به نوک (tip) این شاخه اضافه خواهند شد.
بهصورت اختیاری میتوان یک شاخهٔ جدید با استفاده از -c یا -C ایجاد کرد، یا بهصورت خودکار از یک شاخهٔ ریموت همنام ایجاد نمود (نگاه کنید به --guess)، و یا با --detach درخت کاری را همزمان با جابهجایی، از هر شاخهای جدا کرد.
جابهجایی شاخهها نیازی به خالی و تمیز بودن نمایه و درخت کاری ندارد (یعنی عدم وجود تفاوت در مقایسه با HEAD). با این حال، اگر این عملیات منجر به از بین رفتن تغییرات محلی شود لغو خواهد شد، مگر آنکه با --discard-changes یا --merge دستور دیگری داده شده باشد.
گزینهها (OPTIONS)
<branch>
<new-branch>
<start-point>
میتوانید از ساختار @{-<N>} برای اشاره به <N>-امین شاخه یا کامیتی که قبلاً با استفاده از عملیات git switch یا git checkout به آن جابهجا شدهاید استفاده کنید. همچنین میتوانید - را مشخص نمایید که مترادف با @{-1} است. این اغلب برای جابهجایی سریع میان دو شاخه، یا لغو جابهجایی اشتباه شاخه استفاده میشود.
به عنوان یک حالت ویژه، میتوانید از <rev-a>...<rev-b> به عنوان میانبری برای پایهٔ ادغام (merge base) میان <rev-a> و <rev-b> استفاده کنید، مشروط بر اینکه دقیقاً یک پایهٔ ادغام وجود داشته باشد. میتوانید حداکثر یکی از <rev-a> و <rev-b> را حذف کنید که در این صورت پیشفرض آن HEAD خواهد بود.
-c <new-branch>, --create <new-branch>
$ git branch <new-branch> $ git switch <new-branch>
بدین معنا که شاخه بازنشانی/ایجاد نمیشود مگر آنکه git switch موفقیتآمیز باشد (برای مثال، هنگامی که شاخه در درخت کاری دیگری در حال استفاده است، نه تنها شاخهٔ فعلی یکسان میماند، بلکه شاخه به نقطهٔ شروع نیز بازنشانی نمیشود).
-C <new-branch>, --force-create <new-branch>
$ git branch -f _<new-branch>_ $ git switch _<new-branch>_
-d, --detach
--guess, --no-guess
$ git switch -c <branch> --track <remote>/<branch>
اگر شاخه در چند ریموت وجود داشته باشد و یکی از آنها توسط متغیر پیکربندی checkout.defaultRemote مشخص شده باشد، برای ابهامزدایی از آن استفاده خواهیم کرد؛ حتی اگر <branch> در بین تمام ریموتها یکتا نباشد. برای نمونه آن را به checkout.defaultRemote=origin تنظیم کنید تا در صورت مبهم بودن <branch> اما موجود بودن در ریموت origin، شاخهٔ ریموت همواره از آنجا دریافت شود. همچنین به checkout.defaultRemote در git-config(1) نگاه کنید.
گزینهٔ --guess رفتار پیشفرض است. از --no-guess برای غیرفعال کردن آن استفاده کنید.
رفتار پیشفرض را میتوان از طریق متغیر پیکربندی checkout.guess تنظیم کرد.
-f, --force
--discard-changes
-m, --merge
--conflict=<style>
-q, --quiet
--progress, --no-progress
-t, --track[ (direct|inherit)]
اگر گزینهٔ -c داده نشود، نام شاخهٔ جدید از شاخهٔ ردیابیشدهٔ ریموت مشتق میشود؛ بدین صورت که بخش محلیِ refspec پیکربندیشده برای ریموت مربوطه بررسی شده و سپس بخش ابتدایی تا "*" حذف میشود. این کار به ما میگوید که هنگام شاخهبندی از origin/hack (یا remotes/origin/hack، یا حتی refs/remotes/origin/hack) از hack به عنوان شاخهٔ محلی استفاده کنیم. اگر نام دادهشده فاقد اسلش باشد، یا حدس زدن بالا منجر به نامی خالی شود، حدس زدن لغو میشود. در چنین حالتی میتوانید صریحاً نامی را با -c مشخص کنید.
--no-track
--orphan <new-branch>
--ignore-other-worktrees
--recurse-submodules, --no-recurse-submodules
مثالها (EXAMPLES)
دستور زیر به شاخهٔ "master" جابهجا میشود:
$ git switch master
پس از کار در شاخهٔ اشتباه، جابهجایی به شاخهٔ درست با دستور زیر انجام میشود:
$ git switch mytopic
با این حال، ممکن است شاخهٔ "اشتباه" شما و شاخهٔ درست "mytopic" در فایلهایی که بهصورت محلی تغییر دادهاید تفاوت داشته باشند؛ در این صورت جابهجایی بالا با چنین خطایی مواجه خواهد شد:
$ git switch mytopic error: You have local changes to 'frotz'; not switching branches.
میتوانید فلگ -m را به دستور بدهید که تغییرات محلی شما را به شاخهٔ جدید منتقل خواهد کرد:
$ git switch -m mytopic Applied autostash. Switched to branch 'mytopic' The following paths have local changes: M frotz
پس از جابهجایی، اصلاحات محلی دوباره اعمال میشوند و در فایل نمایهٔ شما ثبت نمیشوند، بنابراین git diff به شما نشان میدهد چه تغییراتی از نوک شاخهٔ جدید ایجاد کردهاید.
برای بازگشت به شاخهٔ قبلی پیش از جابهجایی به mytopic (یعنی شاخهٔ "master"):
$ git switch -
میتوانید یک شاخهٔ جدید را از هر کامیتی توسعه دهید. برای مثال، به "HEAD~3" جابهجا شوید و شاخهٔ "fixup" را بسازید:
$ git switch -c fixup HEAD~3 Switched to a new branch 'fixup'
اگر میخواهید شاخهٔ جدیدی را از یک شاخهٔ ریموت با همان نام آغاز کنید:
$ git switch new-topic Branch `new-topic` set up to track remote branch `new-topic` from `origin` Switched to a new branch `new-topic`
برای تحویل گرفتن کامیت HEAD~3 جهت بررسی یا آزمایش موقت بدون ایجاد یک شاخهٔ جدید:
$ git switch --detach HEAD~3 HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'
اگر مشخص شد آنچه انجام دادهاید ارزش نگهداری دارد، همواره میتوانید نام جدیدی برای آن ایجاد کنید (بدون نیاز به ترک شاخه):
$ git switch -c good-surprises
پیکربندی (CONFIGURATION)
تمامی موارد زیر این خط در این بخش بهطور گزینشی از مستندات git-config(1) برگرفته شدهاند. محتوا همان چیزی است که در آنجا یافت میشود:
checkout.defaultRemote
در حال حاضر این مورد توسط git-switch(1) و git-checkout(1) استفاده میشود، زمانی که git checkout <something> یا git switch <something> شاخهٔ <something> را روی ریموت دیگری تحویل بگیرد، و همچنین توسط git-worktree(1) زمانی که git worktree add به یک شاخهٔ ریموت ارجاع میدهد. این تنظیم ممکن است در آینده برای سایر دستورات مشابه checkout یا قابلیتهای دیگر استفاده شود.
checkout.guess
checkout.workers
یادداشت (Note)
عملیات موازی checkout معمولاً عملکرد بهتری برای مخازن واقع در درایوهای SSD یا روی NFS فراهم میآورد. برای مخازن روی دیسکهای چرخان و/یا سیستمهایی با تعداد هستهٔ اندک، روش پیشفرضِ checkout متوالی اغلب عملکرد بهتری دارد. اندازه و سطح فشردهسازی یک مخزن نیز ممکن است بر میزان کارایی نگارش موازی اثر بگذارد.
checkout.thresholdForParallelism
همچنین ببینید (SEE ALSO)
GIT
بخشی از مجموعهٔ git(1)
| 2026-06-29 | Git 2.55.0 |