GIT-BRANCH(1) دستورات عمومی کاربر GIT-BRANCH(1)

git-branch - فهرست کردن، ایجاد یا حذف شاخه‌ها

git branch [--color[=<when>] | --no-color] [--show-current]
           [-v [--abbrev=<n> | --no-abbrev]]
           [--column[=<options>] | --no-column] [--sort=<key>]
           [--merged [<commit>]] [--no-merged [<commit>]]
           [--contains [<commit>]] [--no-contains [<commit>]]
           [--points-at <object>] [--format=<format>]
           [(-r|--remotes) | (-a|--all)]
           [--list] [<pattern>...]
git branch [--track[=(direct|inherit)] | --no-track] [-f]
           [--recurse-submodules] <branch-name> [<start-point>]
git branch (--set-upstream-to=<upstream>|-u <upstream>) [<branch-name>]
git branch --unset-upstream [<branch-name>]
git branch (-m|-M) [<old-branch>] <new-branch>
git branch (-c|-C) [<old-branch>] <new-branch>
git branch (-d|-D) [-r] <branch-name>...
git branch --edit-description [<branch-name>]

اگر گزینه --list داده شود، یا اگر هیچ آرگومان غیرگزینه‌ای مشخص نشده باشد، شاخه‌های موجود فهرست می‌شوند؛ شاخه کنونی با رنگ سبز برجسته شده و با علامت ستاره مشخص می‌شود. هر شاخه‌ای که در درخت‌های کاری متصل (linked worktrees) تحویل گرفته شده باشد با رنگ فیروزه‌ای برجسته شده و با علامت مثبت مشخص می‌گردد. گزینه -r باعث فهرست شدن شاخه‌های ردگیری دوردست (remote-tracking) می‌شود، و گزینه -a هر دو نوع شاخه‌های محلی و دوردست را نشان می‌دهد.

اگر یک <pattern> مشخص شود، به عنوان یک الگوی کاراکتر عام پوسته (wildcard) برای محدود کردن خروجی به شاخه‌های منطبق استفاده می‌شود. اگر چندین الگو داده شود، شاخه‌ای که با هر یک از الگوها تطبیق داشته باشد نمایش داده خواهد شد.

توجه داشته باشید که هنگام ارائه یک <pattern>، باید از --list استفاده کنید؛ در غیر این صورت ممکن است دستور به عنوان ایجاد شاخه تفسیر شود.

با گزینه --contains، تنها شاخه‌هایی که شامل کامیت مشخص‌شده هستند نمایش داده می‌شوند (به بیان دیگر، شاخه‌هایی که کامیت نوک آن‌ها از نوادگان کامیت نام‌برده است)؛ --no-contains این رفتار را معکوس می‌کند. با گزینه --merged، تنها شاخه‌هایی که در کامیت مشخص‌شده ادغام شده‌اند (یعنی شاخه‌هایی که کامیت نوک آن‌ها از کامیت نام‌برده قابل دستیابی است) فهرست خواهند شد. با گزینه --no-merged تنها شاخه‌هایی که در کامیت مشخص‌شده ادغام نشده‌اند فهرست می‌شوند. اگر آرگومان <commit> مشخص نشود، به طور پیش‌فرض روی HEAD (یعنی نوک شاخه فعلی) قرار می‌گیرد.

شکل دوم دستور یک سرشاخه جدید به نام <branch-name> ایجاد می‌کند که به HEAD فعلی، یا به <start-point> (در صورت تعیین) اشاره دارد. به عنوان یک حالت ویژه، برای <start-point>، می‌توانید از <rev-A>...<rev-B> به عنوان میان‌بری برای پایه ادغام (merge base) میان <rev-A> و <rev-B> استفاده کنید (در صورتی که دقیقاً یک پایه ادغام وجود داشته باشد). شما می‌توانید حداکثر یکی از <rev-A> یا <rev-B> را حذف کنید، که در این حالت به طور پیش‌فرض HEAD در نظر گرفته می‌شود.

توجه داشته باشید که این دستور شاخه جدید را ایجاد می‌کند، اما درخت کاری را به آن سوئیچ نمی‌کند؛ برای جابه‌جایی به شاخه جدید از git switch <new-branch> استفاده کنید.

هنگامی که یک شاخه محلی از روی یک شاخه ردگیری دوردست منشعب می‌شود، گیت شاخه را پیکربندی می‌کند (به‌ویژه ورودی‌های پیکربندی branch.<name>.remote و branch.<name>.merge) به طوری که git pull به شکل مناسب تغییرات را از شاخه ردگیری دوردست ادغام نماید. این رفتار می‌تواند از طریق فلگ پیکربندی سراسری branch.autoSetupMerge تغییر یابد. این تنظیم می‌تواند با استفاده از گزینه‌های --track و --no-track نادیده گرفته شود، و بعداً با استفاده از git branch --set-upstream-to تغییر کند.

با یک گزینه -m یا -M، نام <old-branch> به <new-branch> تغییر خواهد یافت. اگر <old-branch> دارای یک وقایع‌نگار ارجاع (reflog) متناظر باشد، نام آن برای تطبیق با <new-branch> تغییر می‌یابد و یک مدخل وقایع‌نگار ارجاع برای به خاطر سپردن تغییر نام شاخه ایجاد می‌شود. اگر <new-branch> از قبل وجود داشته باشد، باید از -M برای اجبار به انجام تغییر نام استفاده شود.

گزینه‌های -c و -C دقیقاً همان مفاهیم معنایی -m و -M را دارند، به جز اینکه شاخه به جای تغییر نام، همراه با پیکربندی و وقایع‌نگار ارجاع خود در یک نام جدید کپی می‌شود.

با گزینه -d یا -D، شاخه <branch-name> حذف خواهد شد. می‌توانید بیش از یک شاخه را برای حذف مشخص کنید. اگر شاخه در حال حاضر دارای وقایع‌نگار ارجاع باشد، وقایع‌نگار ارجاع نیز حذف خواهد شد.

از گزینه -r همراه با -d برای حذف شاخه‌های ردگیری دوردست استفاده کنید. توجه داشته باشید که حذف شاخه‌های ردگیری دوردست تنها در صورتی منطقی است که آن‌ها دیگر در مخزن دوردست وجود نداشته باشند یا اگر git fetch طوری پیکربندی شده باشد که آن‌ها را دوباره واکشی نکند. همچنین زیردستور prune از git-remote(1) را برای راهکاری جهت پاک‌سازی تمام شاخه‌های ردگیری دوردست منسوخ ببینید.

-d, --delete

حذف یک شاخه. شاخه باید به طور کامل در شاخه بالادستی خود ادغام شده باشد، یا در HEAD اگر هیچ شاخه بالادستی با --track یا --set-upstream-to تنظیم نشده باشد.

-D

میان‌بری برای --delete --force.

--create-reflog

ایجاد وقایع‌نگار ارجاع (reflog) برای شاخه. این گزینه ثبت تمام تغییرات ایجادشده در ارجاع شاخه را فعال می‌کند و امکان استفاده از عبارات شاخص تاریخ‌محور مانند <branch-name>@{yesterday} را فراهم می‌سازد. توجه داشته باشید که در مخازن غیرلخت (non-bare)، وقایع‌نگار ارجاع معمولاً به طور پیش‌فرض با گزینه پیکربندی core.logAllRefUpdates فعال است. شکل نفی‌شده --no-create-reflog تنها یک --create-reflog قبلی را نادیده می‌گیرد، اما در حال حاضر تنظیمات core.logAllRefUpdates را خنثی نمی‌کند.

-f, --force

بازنشانی <branch-name> به <start-point>، حتی اگر <branch-name> از قبل وجود داشته باشد. بدون گزینه -f، دستور git branch از تغییر یک شاخه موجود خودداری می‌کند. در ترکیب با -d (یا --delete)، اجازه می‌دهد شاخه بدون در نظر گرفتن وضعیت ادغام آن یا حتی اشاره کردن به یک کامیت معتبر حذف شود. در ترکیب با -m (یا --move)، اجازه می‌دهد نام شاخه تغییر کند حتی اگر نام شاخه جدید از قبل وجود داشته باشد؛ همین امر برای -c (یا --copy) نیز صادق است.

توجه داشته باشید که دستور git branch -f <branch-name> [<start-point>]، حتی با گزینه -f، از تغییر شاخه موجود <branch-name> که در درخت کاری متصل دیگری در همان مخزن تحویل گرفته شده است خودداری می‌کند.

-m, --move

انتقال/تغییر نام یک شاخه، همراه با پیکربندی و وقایع‌نگار ارجاع آن.

-M

میان‌بری برای --move --force.

-c, --copy

کپی کردن یک شاخه، همراه با پیکربندی و وقایع‌نگار ارجاع آن.

-C

میان‌بری برای --copy --force.

--color[=<when>]

رنگی کردن شاخه‌ها برای برجسته ساختن شاخه فعلی، شاخه‌های محلی و شاخه‌های ردگیری دوردست. مقدار باید یکی از always (پیش‌فرض)، never، یا auto باشد.

--no-color

خاموش کردن رنگ‌بندی شاخه‌ها، حتی زمانی که فایل پیکربندی پیش‌فرض خروجی رنگی را تعیین کرده باشد. معادل با --color=never.

-i, --ignore-case

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

--omit-empty

پس از ارجاع‌های قالب‌بندی‌شده‌ای که قالب آن‌ها به یک رشته خالی گسترش می‌یابد، خط جدید چاپ نشود.

--column[=<options>], --no-column

نمایش فهرست شاخه‌ها در ستون‌ها. برای نحو گزینه‌ها متغیر پیکربندی column.branch را ببینید. گزینه‌های --column و --no-column بدون گزینه به ترتیب معادل always و never هستند.

این گزینه فقط در حالت غیرتفصیلی (non-verbose) کاربرد دارد.

--sort=<key>

مرتب‌سازی بر اساس <key>. پیشوند - را برای مرتب‌سازی نزولی بر اساس مقدار اضافه کنید. می‌توانید از گزینه --sort=<key> چندین بار استفاده کنید که در این صورت آخرین کلید به کلید اصلی تبدیل می‌شود. کلیدهای پشتیبانی‌شده همان موارد موجود در git-for-each-ref(1) هستند. ترتیب مرتب‌سازی به طور پیش‌فرض بر اساس مقدار پیکربندی‌شده در متغیر branch.sort (در صورت وجود) است، یا بر اساس نام ارجاع کامل (شامل پیشوند refs/..) مرتب می‌شود. این گزینه ابتدا HEAD جداشده (در صورت وجود)، سپس شاخه‌های محلی و در نهایت شاخه‌های ردگیری دوردست را فهرست می‌کند. دستور git-config(1) را ببینید.

-r, --remotes

فهرست کردن یا حذف (در صورت استفاده همراه با -d) شاخه‌های ردگیری دوردست. با --list برای تطبیق با الگو(های) اختیاری ترکیب می‌شود.

-a, --all

فهرست کردن هم شاخه‌های ردگیری دوردست و هم شاخه‌های محلی. با --list برای تطبیق با الگو(های) اختیاری ترکیب می‌شود.

-l, --list

فهرست کردن شاخه‌ها. همراه با <pattern>.. اختیاری، مثلاً git branch --list 'maint-*'، فقط شاخه‌هایی که با الگو(ها) مطابقت دارند را فهرست می‌کند.

--show-current

چاپ نام شاخه کنونی. در حالت HEAD جداشده (detached)، هیچ متنی چاپ نمی‌شود.

-v, -vv, --verbose

هنگامی که در حالت فهرست است، شناسه sha1 و خط موضوع کامیت را برای هر سرشاخه، همراه با رابطه با شاخه بالادستی (در صورت وجود) نشان می‌دهد. اگر دو بار داده شود، مسیر درخت کاری متصل (در صورت وجود) و نام شاخه بالادستی را نیز چاپ می‌کند (همچنین ببینید git remote show <remote>). توجه داشته باشید که مسیر مربوط به HEAD درخت کاری کنونی چاپ نخواهد شد (همیشه دایرکتوری کنونی شما خواهد بود).

-q, --quiet

هنگام ایجاد یا حذف یک شاخه، عملکرد ساکت‌تری داشته و پیام‌های غیرخطا را سرکوب می‌کند.

--abbrev=<n>

در فهرست تفصیلی که نام شیء کامیت را نشان می‌دهد، کوتاه‌ترین پیشوندی را نمایش می‌دهد که حداقل <n> رقم هگزادسیمال طول داشته و به طور یکتا به شیء ارجاع دهد. مقدار پیش‌فرض ۷ است و می‌تواند با گزینه پیکربندی core.abbrev بازنویسی شود.

--no-abbrev

نمایش شناسه‌های کامل sha1 در فهرست خروجی به جای کوتاه کردن آن‌ها.

-t, --track[=(direct|inherit)]

هنگام ایجاد یک شاخه جدید، ورودی‌های پیکربندی branch.<name>.remote و branch.<name>.merge را برای تعیین پیکربندی ردگیری «بالادست» (upstream) برای شاخه جدید تنظیم می‌کند. این پیکربندی به گیت می‌گوید که رابطه میان دو شاخه را در git status و git branch -v نشان دهد. علاوه بر این، دستور git pull بدون آرگومان را هدایت می‌کند تا هنگام تحویل گرفتن شاخه جدید، از شاخه بالادستی دریافت (pull) کند.

شاخه بالادست دقیق بر اساس آرگومان اختیاری انتخاب می‌شود: -t، --track، یا --track=direct به معنای استفاده از خود شاخه نقطه شروع به عنوان بالادست است؛ --track=inherit به معنای کپی کردن پیکربندی بالادستِ شاخه نقطه شروع است.

متغیر پیکربندی branch.autoSetupMerge مشخص می‌کند که git switch، git checkout و git branch هنگامی که هیچ‌کدام از گزینه‌های --track و --no-track مشخص نشده باشند چگونه باید رفتار کنند:

گزینه پیش‌فرض، true، هر زمان که نقطه شروع یک شاخه ردگیری دوردست باشد طوری عمل می‌کند که گویی --track=direct داده شده است. false طوری عمل می‌کند که گویی --no-track داده شده است. always طوری عمل می‌کند که گویی --track=direct داده شده است. inherit طوری عمل می‌کند که گویی --track=inherit داده شده است. simple تنها زمانی به صورت --track=direct عمل می‌کند که <start-point> یک شاخه ردگیری دوردست باشد و شاخه جدید همان نام شاخه دوردست را داشته باشد.

برای بحث تکمیلی در مورد نحوه استفاده از گزینه‌های branch.<name>.remote و branch.<name>.merge، دستورات git-pull(1) و git-config(1) را ببینید.

--no-track

پیکربندی «بالادست» را تنظیم نکن، حتی اگر متغیر پیکربندی branch.autoSetupMerge تنظیم شده باشد.

--recurse-submodules

این گزینه آزمایشی است! در صورتی که submodule.propagateBranches فعال باشد، باعث می‌شود دستور فعلی به صورت بازگشتی در زیرماژول‌ها پیمایش کند. مدخل submodule.propagateBranches در git-config(1) را ببینید. در حال حاضر، فقط ایجاد شاخه پشتیبانی می‌شود.

هنگام استفاده در ایجاد شاخه، یک شاخه جدید <branch-name> در ابرپروژه (superproject) و تمام زیرماژول‌های موجود در <start-point> ابرپروژه ایجاد خواهد شد. در زیرماژول‌ها، شاخه به کامیت زیرماژول در <start-point> ابرپروژه اشاره خواهد کرد، اما اطلاعات ردگیری شاخه بر اساس شاخه‌ها و دوردست‌های زیرماژول تنظیم می‌شود؛ برای مثال git branch --recurse-submodules topic origin/main شاخه زیرماژول «topic» را ایجاد می‌کند که به کامیت زیرماژول در «origin/main» ابرپروژه اشاره دارد، اما «origin/main» زیرماژول را ردگیری می‌کند.

--set-upstream

از آنجا که این گزینه نحو گیج‌کننده‌ای داشت، دیگر پشتیبانی نمی‌شود. لطفاً به جای آن از --track یا --set-upstream-to استفاده کنید.

-u <upstream>, --set-upstream-to=<upstream>

اطلاعات ردگیری <branch-name> را طوری تنظیم می‌کند که <upstream> به عنوان شاخه بالادستی <branch-name> در نظر گرفته شود. اگر هیچ <branch-name> مشخص نشده باشد، به طور پیش‌فرض روی شاخه فعلی قرار می‌گیرد.

--unset-upstream

حذف اطلاعات بالادست برای <branch-name>. اگر هیچ شاخه‌ای مشخص نشده باشد، به طور پیش‌فرض روی شاخه فعلی اعمال می‌شود.

--edit-description

یک ویرایشگر را باز می‌کند و متنی را برای توضیح اینکه شاخه برای چه کاری است ویرایش می‌کند، تا توسط دستورات مختلف دیگر استفاده شود (مانند format-patch، request-pull و merge (در صورت فعال بودن)). توضیحات چندخطی نیز مجاز است.

--contains [<commit>]

فقط شاخه‌هایی را فهرست می‌کند که شامل <commit> باشند (در صورت عدم تعیین، HEAD). این گزینه متضمن --list است.

--no-contains [<commit>]

فقط شاخه‌هایی را فهرست می‌کند که شامل <commit> نباشند (در صورت عدم تعیین، HEAD). این گزینه متضمن --list است.

--merged [<commit>]

فقط شاخه‌هایی را فهرست می‌کند که نوک آن‌ها از <commit> قابل دستیابی باشد (در صورت عدم تعیین، HEAD). این گزینه متضمن --list است.

--no-merged [<commit>]

فقط شاخه‌هایی را فهرست می‌کند که نوک آن‌ها از <commit> قابل دستیابی نباشد (در صورت عدم تعیین، HEAD). این گزینه متضمن --list است.

--points-at <object>

فقط شاخه‌های مربوط به <object> را فهرست می‌کند.

--format <format>

رشته‌ای که %(fieldname) را از ارجاع شاخه در حال نمایش و شیئی که به آن اشاره دارد جای‌گذاری می‌کند. <format> همانند قالب در git-for-each-ref(1) است.

<branch-name>

نام شاخه‌ای که باید ایجاد یا حذف شود. نام شاخه جدید باید تمام بررسی‌های تعریف‌شده توسط git-check-ref-format(1) را با موفقیت پشت سر بگذارد. برخی از این بررسی‌ها ممکن است نویسه‌های مجاز در نام شاخه را محدود کنند.

<start-point>

سرشاخه جدید به این کامیت اشاره خواهد کرد. این مقدار می‌تواند به عنوان یک نام شاخه، شناسه کامیت یا یک تگ داده شود. اگر این گزینه حذف شود، HEAD فعلی به جای آن استفاده خواهد شد.

<old-branch>

نام یک شاخه موجود. اگر این گزینه حذف شود، نام شاخه فعلی به جای آن استفاده خواهد شد.

<new-branch>

نام جدید برای یک شاخه موجود. همان محدودیت‌های <branch-name> در اینجا نیز اعمال می‌شوند.

متغیر pager.branch تنها زمانی رعایت می‌شود که شاخه‌ها فهرست شوند، یعنی زمانی که --list استفاده شده یا مستتر باشد. مقدار پیش‌فرض استفاده از یک صفحه‌بند (pager) است. دستور git-config(1) را ببینید.

تمام موارد بالاتر از این خط در این بخش از مستندات git-config(1) گنجانده نشده است. محتوایی که در ادامه می‌آید همان چیزی است که در آنجا یافت می‌شود:

branch.autoSetupMerge

به دستورات git branch، git switch و git checkout می‌گوید شاخه‌های جدید را طوری تنظیم کنند که git-pull(1) به درستی تغییرات را از شاخه نقطه شروع ادغام نماید. توجه داشته باشید که حتی اگر این گزینه تنظیم نشده باشد، این رفتار می‌تواند به ازای هر شاخه با استفاده از گزینه‌های --track و --no-track انتخاب شود. مقدار پیش‌فرض این گزینه true است. مقادیر معتبر عبارتند از:

false

هیچ راه‌اندازی خودکاری انجام نمی‌شود

true

راه‌اندازی خودکار زمانی انجام می‌شود که نقطه شروع یک شاخه ردگیری دوردست باشد

always

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

inherit

اگر نقطه شروع دارای پیکربندی ردگیری باشد، به شاخه جدید کپی می‌شود

simple

راه‌اندازی خودکار تنها زمانی انجام می‌شود که نقطه شروع یک شاخه ردگیری دوردست باشد و شاخه جدید همان نام شاخه دوردست را داشته باشد.

branch.autoSetupRebase

هنگامی که یک شاخه جدید با git branch، git switch یا git checkout ایجاد می‌شود که شاخه دیگری را ردگیری می‌کند، این متغیر به گیت می‌گوید دریافت (pull) را طوری تنظیم کند که به جای ادغام، بازنشانی پایه (rebase) انجام شود (به branch.<name>.rebase مراجعه کنید). مقادیر معتبر عبارتند از:

never

بازنشانی پایه هرگز به طور خودکار روی true تنظیم نمی‌شود.

local

بازنشانی پایه برای شاخه‌های ردگیری‌شده از سایر شاخه‌های محلی روی true تنظیم می‌شود.

remote

بازنشانی پایه برای شاخه‌های ردگیری‌شده از شاخه‌های ردگیری دوردست روی true تنظیم می‌شود.

always

بازنشانی پایه برای تمام شاخه‌های ردگیری روی true تنظیم خواهد شد.

برای جزئیات در مورد چگونگی تنظیم یک شاخه برای ردگیری شاخه دیگر، branch.autoSetupMerge را ببینید. مقدار پیش‌فرض این گزینه never است.

branch.sort

این متغیر ترتیب مرتب‌سازی شاخه‌ها را هنگام نمایش توسط git-branch(1) کنترل می‌کند. بدون ارائه گزینه --sort=<value>، مقدار این متغیر به عنوان پیش‌فرض استفاده خواهد شد. برای مقادیر معتبر، نام فیلدهای git-for-each-ref(1) را ببینید.

branch.<name>.remote

هنگامی که روی شاخه <name> هستید، به git fetch و git push می‌گوید که از کدام مخزن دوردست واکشی کرده یا به کدام مخزن ارسال کنند. مخزن دوردست برای ارسال ممکن است با remote.pushDefault (برای همه شاخه‌ها) بازنویسی شود. مخزن دوردست برای ارسال برای شاخه فعلی، ممکن است مجدداً با branch.<name>.pushRemote بازنویسی شود. اگر هیچ مخزن دوردستی پیکربندی نشده باشد، یا اگر روی هیچ شاخه‌ای قرار ندارید و بیش از یک مخزن دوردست در مخزن تعریف شده باشد، مقدار پیش‌فرض برای واکشی origin و برای ارسال remote.pushDefault خواهد بود. علاوه بر این، . (یک نقطه) نشان‌دهنده مخزن محلی فعلی است (یک مخزن نقطه‌ای)، یادداشت پایانی branch.<name>.merge را در زیر ببینید.

branch.<name>.pushRemote

هنگامی که روی شاخه <name> هستید، branch.<name>.remote را برای ارسال بازنویسی می‌کند. همچنین remote.pushDefault را برای ارسال از شاخه <name> بازنویسی می‌نماید. هنگامی که از یک مکان دریافت می‌کنید (مثلاً بالادست خود) و به مکان دیگری ارسال می‌کنید (مثلاً مخزن انتشار اختصاصی خود)، می‌توانید remote.pushDefault را برای تعیین مخزن دوردستِ ارسال برای همه شاخه‌ها تنظیم کرده و از این گزینه برای بازنویسی آن برای یک شاخه خاص استفاده کنید.

branch.<name>.merge

همراه با branch.<name>.remote، شاخه بالادستی را برای شاخه داده‌شده تعریف می‌کند. به git fetch/git pull/git rebase می‌گوید که کدام شاخه را ادغام کنند و همچنین می‌تواند بر git push تأثیر بگذارد (به push.default مراجعه کنید). هنگامی که در شاخه <name> هستید، به git fetch اعلام می‌کند که چه refspec پیش‌فرضی برای ادغام در FETCH_HEAD علامت‌گذاری شود. مقدار مانند بخش دوردست یک refspec مدیریت می‌شود و باید با ارجاعی که از مخزن دوردستِ مشخص‌شده توسط branch.<name>.remote واکشی می‌شود مطابقت داشته باشد. اطلاعات ادغام توسط git pull (که ابتدا git fetch را فراخوانی می‌کند) برای یافتن شاخه پیش‌فرض جهت ادغام استفاده می‌شود. بدون این گزینه، git pull به طور پیش‌فرض اولین refspec واکشی‌شده را ادغام می‌کند. برای دستیابی به یک ادغام چندشاخه (octopus merge) چندین مقدار را مشخص کنید. اگر می‌خواهید git pull را طوری تنظیم کنید که از شاخه دیگری در مخزن محلی به درون <name> ادغام شود، می‌توانید branch.<name>.merge را به شاخه مورد نظر اشاره داده و از تنظیم مسیر نسبی . (یک نقطه) برای branch.<name>.remote استفاده کنید.

branch.<name>.mergeOptions

گزینه‌های پیش‌فرض را برای ادغام در شاخه <name> تنظیم می‌کند. نحو و گزینه‌های پشتیبانی‌شده همانند موارد git-merge(1) هستند، اما مقادیر گزینه‌های حاوی نویسه‌های فاصله خالی در حال حاضر پشتیبانی نمی‌شوند.

branch.<name>.rebase

هنگامی که true باشد، هنگام اجرای git pull، شاخه <name> را به جای ادغام شاخه پیش‌فرض از مخزن دوردست پیش‌فرض، بر روی شاخه واکشی‌شده بازنشانی پایه (rebase) می‌کند. برای انجام این کار به شیوه‌ای غیروابسته به شاخه، pull.rebase را ببینید.

هنگامی که merges (یا فقط m) باشد، گزینه --rebase-merges را به git rebase پاس می‌دهد تا کامیت‌های ادغام محلی در بازنشانی پایه گنجانده شوند (برای جزئیات به git-rebase(1) مراجعه کنید).

هنگامی که مقدار interactive (یا فقط i) باشد، بازنشانی پایه در حالت تعاملی اجرا می‌شود.

نکته: این عملیات بالقوه خطرناک است؛ از آن استفاده نکنید مگر اینکه پیامدهای آن را درک کرده باشید (برای جزئیات به git-rebase(1) مراجعه کنید).

branch.<name>.description

توضیحات شاخه، می‌تواند با git branch --edit-description ویرایش شود. توضیحات شاخه به طور خودکار به نامه پوششی format-patch یا خلاصه request-pull اضافه می‌شود.

شروع توسعه از یک تگ شناخته‌شده

$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
$ cd my2.6
$ git branch my2.6.14 v2.6.14   (1)
$ git switch my2.6.14
1. این مرحله و مرحله بعد می‌توانند در یک مرحله واحد با دستور «checkout -b my2.6.14 v2.6.14» ترکیب شوند.

حذف یک شاخه غیرضروری

$ git clone git://git.kernel.org/.../git.git my.git
$ cd my.git
$ git branch -d -r origin/todo origin/html origin/man   (1)
$ git branch -D test                                    (2)
1. شاخه‌های ردگیری دوردست «todo»، «html» و «man» را حذف می‌کند. دستور بعدی git fetch یا git pull آن‌ها را مجدداً ایجاد خواهد کرد مگر اینکه آن‌ها را طوری پیکربندی کنید که واکشی نشوند. دستور git-fetch(1) را ببینید.
2. شاخه «test» را حذف می‌کند حتی اگر شاخه «master» (یا هر شاخه‌ای که در حال حاضر تحویل گرفته شده است) تمام کامیت‌های شاخه test را در بر نداشته باشد.

فهرست کردن شاخه‌ها از یک مخزن دوردست خاص

$ git branch -r -l '<remote>/<pattern>'                 (1)
$ git for-each-ref 'refs/remotes/<remote>/<pattern>'    (2)
1. استفاده از -a باعث درهم‌آمیختن <remote> با هر شاخه محلی که تصادفاً با همان الگوی <remote> پیشوند دارد خواهد شد.
2. دستور for-each-ref می‌تواند طیف گسترده‌ای از گزینه‌ها را بپذیرد. دستور git-for-each-ref(1) را ببینید.

الگوها معمولاً نیاز به نقل‌قول (کوتیشن) دارند.

اگر در حال ایجاد شاخه‌ای هستید که می‌خواهید بلافاصله به آن بروید، آسان‌تر است که از دستور git switch همراه با گزینه -c آن برای انجام این کار در قالب یک دستور واحد استفاده کنید.

گزینه‌های --contains، --no-contains، --merged و --no-merged چهار هدف مرتبط اما متمایز را برآورده می‌کنند:

•گزینه --contains <commit> برای یافتن تمام شاخه‌هایی استفاده می‌شود که در صورت بازنشانی پایه (rebase) یا اصلاح (amend) شدن <commit> به توجه ویژه نیاز خواهند داشت، چرا که آن شاخه‌ها شامل <commit> مشخص‌شده هستند.
•گزینه --no-contains <commit> معکوس آن است، یعنی شاخه‌هایی که شامل <commit> مشخص‌شده نیستند.
•گزینه --merged برای یافتن تمام شاخه‌هایی به کار می‌رود که می‌توان آن‌ها را با خیال راحت حذف کرد، چرا که آن شاخه‌ها به طور کامل در HEAD گنجانده شده‌اند.
•گزینه --no-merged برای یافتن شاخه‌هایی استفاده می‌شود که کاندید ادغام در HEAD هستند، چرا که آن شاخه‌ها به طور کامل در HEAD گنجانده نشده‌اند.

هنگام ترکیب چندین فیلتر --contains و --no-contains، تنها ارجاع‌هایی نشان داده می‌شوند که حداقل شامل یکی از کامیت‌های --contains بوده و هیچ‌یک از کامیت‌های --no-contains را شامل نشوند.

هنگام ترکیب چندین فیلتر --merged و --no-merged، تنها ارجاع‌هایی نشان داده می‌شوند که حداقل از یکی از کامیت‌های --merged قابل دستیابی بوده و از هیچ‌یک از کامیت‌های --no-merged قابل دستیابی نباشند.

git-check-ref-format(1), git-fetch(1), git-remote(1), "Understanding history: What is a branch?"[1] در راهنمای کاربری گیت.

بخشی از مجموعه git(1)

1.
"Understanding history: What is a branch?"
file:///usr/share/doc/git-doc/user-manual.html#what-is-a-branch
2026-06-29 Git 2.55.0