'\" t .\" Title: git-reset .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2026-06-29 .\" Manual: Git Manual .\" Source: Git 2.55.0 .\" Language: English .\" .TH "GIT\-RESET" "1" "2026\-06\-29" "Git 2\&.55\&.0" "Git Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" git-reset \- بازنشانی HEAD یا ایندکس به یک وضعیت مشخص .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fBgit\fR \fBreset\fR [\fB\-\-\soft\fR | \fB\-\-\mixed\fR [\fB\-N\fR] | \fB\-\-\hard\fR | \fB\-\-\merge\fR | \fB\-\-\keep\fR] [\fB\-q\fR] [\fI\fR] \fBgit\fR \fBreset\fR [\fB\-q\fR] [\fI\fR] [\fB\-\-\fR] \fI\fR\&... \fBgit\fR \fBreset\fR [\fB\-q\fR] [\fB\-\-\pathspec\-from\-file=\fR\fI\fR [\fB\-\-\pathspec\-file\-nul\fR]] [\fI\fR] \fBgit\fR \fBreset\fR (\fB\-\-\patch\fR | \fB\-p\fR) [\fI\fR] [\fB\-\-\fR] [\fI\fR\&...] .fi .sp .SH "توضیحات (DESCRIPTION)" .sp دستور \fBgit\fR \fBreset\fR یکی از کارهای زیر را انجام می‌دهد: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} دستور \fBgit\fR \fBreset\fR [\fI\fR] \fI\fR تغییر می‌دهد که \fBHEAD\fR به کدام کامیت اشاره کند\&. این قابلیت امکان خنثی‌سازی عملیات مختلف Git مانند commit، merge، rebase و pull را فراهم می‌سازد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} هنگامی که فایل‌ها یا دایرکتوری‌ها را مشخص می‌کنید یا گزینه \fB\-\-\patch\fR را ارسال می‌نمایید، \fBgit\fR \fBreset\fR نسخه استیج‌شده (در ایندکس) از فایل‌های مشخص‌شده را به‌روزرسانی می‌کند\&. .PP \fBgit\fR \fBreset\fR [\fI\fR] [\fI\fR] .RS 4 سرشاخه جاری (\fBHEAD\fR) را طوری تنظیم می‌کند که به \fI\fR اشاره کند\&. بسته به \fI\fR، دایرکتوری کاری و/یا ایندکس را نیز برای تطابق با محتوای \fI\fR به‌روزرسانی می‌کند\&. \fI\fR به‌طور پیش‌فرض \fBHEAD\fR است\&. پیش از عملیات، \fBORIG_HEAD\fR روی سرشاخه فعلی تنظیم می‌شود\&. .sp حالت \fI\fR باید یکی از موارد زیر باشد (پیش‌فرض \fB\-\-\mixed\fR): .PP \fB\-\-\mixed\fR .RS 4 دایرکتوری کاری شما را بدون تغییر باقی می‌گذارد\&. ایندکس را برای تطابق با \fBHEAD\fR جدید به‌روزرسانی می‌کند، بنابراین هیچ تغییری در ناحیه استیج نخواهد بود\&. .sp اگر \fB\-N\fR مشخص شود، مسیرهای حذف‌شده به عنوان قصد افزودن (intent\-to\-add) علامت‌گذاری می‌شوند (به \fBgit-add R(1) مراجعه کنید)\&. .RE .PP \fB\-\-\soft\fR .RS 4 فایل‌های درخت کاری و ایندکس شما را بدون تغییر باقی می‌گذارد\&. برای مثال، اگر هیچ تغییر استیج‌شده‌ای ندارید، می‌توانید از \fBgit\fR \fBreset\fR \fB\-\-\soft\fR \fBHEAD~5\fR; \fBgit\fR \fBcommit\fR برای ترکیب ۵ کامیت آخر در ۱ کامیت استفاده کنید\&. این حتی با وجود تغییرات در درخت کاری که دست‌نخورده باقی می‌مانند کار می‌کند، اما چنین کاربردی می‌تواند باعث سردرگمی شود\&. .RE .PP \fB\-\-\hard\fR .RS 4 تمام فایل‌ها و دایرکتوری‌ها را با نسخه برگرفته از \fI\fR بازنویسی می‌کند، و ممکن است فایل‌های ردیابی‌نشده را نیز بازنویسی کند\&. فایل‌های ردیابی‌شده‌ای که در \fI\fR وجود ندارند حذف می‌شوند تا درخت کاری با \fI\fR مطابقت یابد\&. ایندکس را به‌روزرسانی می‌کند تا با \fBHEAD\fR جدید مطابقت داشته باشد، بنابراین چیزی استیج نخواهد بود\&. .RE .PP \fB\-\-\merge\fR .RS 4 ایندکس را بازنشانی می‌کند و فایل‌هایی در درخت کاری را که بین \fI\fR و \fBHEAD\fR متفاوت هستند به‌روزرسانی می‌کند، اما فایل‌هایی را که بین ایندکس و درخت کاری متفاوت هستند (یعنی تغییراتی دارند که هنوز اضافه نشده‌اند) حفظ می‌کند\&. عمدتاً برای بازنشانی ورودی‌های ادغام‌نشده ایندکس کاربرد دارد، مانند مواردی که پس از \fBgit\fR \fBam\fR \fB\-3\fR یا \fBgit\fR \fBswitch\fR \fB\-m\fR در موقعیت‌های خاص باقی می‌مانند\&. اگر فایلی که بین \fI\fR و ایندکس متفاوت است دارای تغییرات استیج‌نشده باشد، عملیات بازنشانی لغو می‌شود\&. .RE .PP \fB\-\-\keep\fR .RS 4 ورودی‌های ایندکس را بازنشانی می‌کند و فایل‌هایی در درخت کاری را که بین \fI\fR و \fBHEAD\fR تفاوت دارند به‌روزرسانی می‌کند\&. اگر فایلی که بین \fI\fR و \fBHEAD\fR تفاوت دارد دارای تغییرات محلی باشد، بازنشانی لغو می‌شود\&. .RE .PP \fB\-\-\recurse\-submodules\fR, \fB\-\-\no\-recurse\-submodules\fR .RS 4 هنگامی که درخت کاری به‌روزرسانی می‌شود، استفاده از \(oq\-\-\recurse\-submodules` همچنین درخت کاری تمام زیرماژول‌های فعال را به صورت بازگشتی مطابق با کامیت ثبت‌شده در ابرپروژه بازنشانی می‌کند، و همچنین \fBHEAD\fR زیرماژول‌ها را در آن کامیت به حالت جداشده (detached) قرار می‌دهد\&. .RE .RE .PP \fBgit\fR \fBreset\fR [\fB\-q\fR] [\fI\fR] [\fB\-\-\fR] \fI\fR\&.\&.\&., \fBgit\fR \fBreset\fR [\fB\-q\fR] [\fB\-\-\pathspec\-from\-file=\fR\fI\fR [\fB\-\-\pathspec\-file\-nul\fR]] [\fI\fR] .RS 4 برای تمام فایل‌ها یا دایرکتوری‌های مشخص‌شده، نسخه استیج‌شده را روی نسخه‌ای از کامیت یا درخت داده‌شده (که پیش‌فرض آن \fBHEAD\fR است) تنظیم می‌کند\&. .sp این بدان معناست که \fBgit\fR \fBreset\fR \fI\fR برعکس \fBgit\fR \fBadd\fR \fI\fR است: تمام تغییرات در فایل(ها) یا دایرکتوری‌های مشخص‌شده را از حالت استیج خارج می‌کند (unstage)\&. این معادل است با \fBgit\fR \fBrestore\fR \fB\-\-\staged\fR \fI\fR\&.\&.\&.\&. .sp در این حالت، \fBgit\fR \fBreset\fR تنها ایندکس را به‌روزرسانی می‌کند (بدون به‌روزرسانی \fBHEAD\fR یا فایل‌های درخت کاری)\&. اگر می‌خواهید علاوه بر ورودی‌های ایندکس، فایل‌ها را نیز به‌روزرسانی کنید، از \fBgit-restore\fR(1) استفاده کنید\&. .RE .PP \fBgit\fR \fBreset\fR (\fB\-\-\patch\fR | \fB\-p\fR) [\fI\fR] [\fB\-\-\fR] [\fI\fR\&.\&.\&.] .RS 4 تغییرات را به صورت تعاملی از تفاوت میان ایندکس و کامیت یا درخت مشخص‌شده (که پیش‌فرض آن \fBHEAD\fR است) انتخاب می‌کند\&. ایندکس با استفاده از تغییرات انتخاب‌شده اصلاح می‌شود\&. .sp این بدان معناست که \fBgit\fR \fBreset\fR \fB\-p\fR برعکس \fBgit\fR \fBadd\fR \fB\-p\fR است، یعنی می‌توانید از آن برای خارج کردن گزینشی تغییرات از حالت استیج استفاده کنید\&. برای یادگیری نحوه استفاده از گزینه \fB\-\-\patch\fR به بخش "Interactive Mode" در \fBgit-add\fR(1) مراجعه کنید\&. .RE .RE .sp برای آشنایی با تفاوت‌های میان این سه دستور، بخش "Reset, restore and revert" را در \fBgit\fR(1) ببینید\&. .SH "گزینه‌ها (OPTIONS)" .PP \fB\-q\fR, \fB\-\-\quiet\fR .RS 4 بی‌صدا کار کند، تنها خطاها را گزارش دهد\&. .RE .PP \fB\-\-\refresh\fR, \fB\-\-\no\-refresh\fR .RS 4 تازه‌سازی ایندکس پس از یک بازنشانی mixed\&. به‌طور پیش‌فرض فعال است\&. .RE .PP \fB\-\-\pathspec\-from\-file=\fR\fI\fR .RS 4 الگوی مسیر (pathspec) به‌جای آرگومان‌های خط فرمان، در \fI\fR منتقل می‌شود\&. اگر \fI\fR دقیقاً \fB\-\fR باشد، ورودی استاندارد استفاده می‌شود\&. عناصر pathspec با \fILF\fR یا \fICR\fR/\fILF\fR از هم جدا می‌شوند\&. عناصر pathspec می‌توانند همان‌طور که برای متغیر پیکربندی \fBcore\&.quotePath\fR توضیح داده شده نقل‌قول شوند (ببینید \fBgit-config\fR(1))\&. همچنین \fB\-\-\pathspec\-file\-nul\fR و گزینه سراسری \fB\-\-\literal\-pathspecs\fR را ببینید\&. .RE .PP \fB\-\-\pathspec\-file\-nul\fR .RS 4 تنها همراه با \fB\-\-\pathspec\-from\-file\fR معنی دارد\&. عناصر pathspec با نویسه \fINUL\fR جدا می‌شوند و تمام نویسه‌های دیگر (از جمله خطوط جدید و نقل‌قول‌ها) به‌صورت تحت‌اللفظی در نظر گرفته می‌شوند\&. .RE .PP \fB\-U\fR\fI\fR, \fB\-\-\unified=\fR\fI\fR .RS 4 تولید diff با \fI\fR خط زمینه (context)\&. تعداد خطوط زمینه به‌طور پیش‌فرض \fBdiff\&.context\fR یا در صورت عدم تنظیم متغیر برابر ۳ است\&. (گزینه \fB\-U\fR بدون \fI\fR به دلیل یک اتفاق تاریخی بی‌صدا به عنوان مترادف \fB\-p\fR پذیرفته می‌شود)\&. .RE .PP \fB\-\-\inter\-hunk\-context=\fR\fI\fR .RS 4 نمایش زمینه میان تکه‌های diff (hunks) تا حداکثر تعداد خطوط مشخص‌شده، و بدین ترتیب پیوند زدن تکه‌هایی که به یکدیگر نزدیک هستند\&. پیش‌فرض \fBdiff\&.interHunkContext\fR یا ۰ در صورت عدم تنظیم گزینه پیکربندی است\&. .RE .PP \fB\-\-\fR .RS 4 هیچ آرگومان دیگری را به عنوان گزینه تفسیر نکند\&. .RE .PP \fI\fR\&.\&.\&. .RS 4 مسیرهای تحت تأثیر عملیات را محدود می‌کند\&. .sp برای جزئیات بیشتر، مدخل \fIpathspec\fR را در \fBgitglossary\fR(7) ببینید\&. .RE .SH "مثال‌ها (EXAMPLES)" .PP لغو دستور add .RS 4 .sp .if n \{\ .RS 4 .\} .nf $ edit \fB(1)\fR $ git add frotz\&.c filfre\&.c $ mailx \fB(2)\fR $ git reset \fB(3)\fR $ git pull git://info\&.example\&.com/ nitfol \fB(4)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ شما با خوشحالی در حال کار بر روی چیزی هستید و می‌بینید که تغییرات در این فایل‌ها در وضعیت خوبی هستند\&. نمی‌خواهید هنگام اجرای \fBgit\fR \fBdiff\fR آن‌ها را ببینید، زیرا قصد دارید روی فایل‌های دیگر کار کنید و تغییرات این فایل‌ها تمرکزتان را به هم می‌زند\&. T} \fB2.\fR\h'-2n':T{ کسی از شما می‌خواهد pull کنید و تغییرات ارزش ادغام کردن را دارند\&. T} \fB3.\fR\h'-2n':T{ با این حال، شما قبلاً ایندکس را دستکاری کرده‌اید (یعنی ایندکس شما با کامیت \fBHEAD\fR مطابقت ندارد)\&. اما می‌دانید pull شما بر روی \fBfrotz\&.c\fR یا \fBfilfre\&.c\fR تأثیری ندارد، بنابراین تغییرات ایندکس را برای این دو فایل بازمی‌گردانید\&. تغییرات شما در درخت کاری همچنان در آنجا باقی می‌ماند\&. T} \fB4.\fR\h'-2n':T{ سپس می‌توانید pull و merge کنید، در حالی که تغییرات \fBfrotz\&.c\fR و \fBfilfre\&.c\fR همچنان در درخت کاری باقی مانده‌اند\&. T} .TE .RE .PP لغو یک کامیت و انجام مجدد آن .RS 4 .sp .if n \{\ .RS 4 .\} .nf $ git commit \&.\&.\&. $ git reset \-\-\soft HEAD^ \fB(1)\fR $ edit \fB(2)\fR $ git commit \-a \-c ORIG_HEAD \fB(3)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ این کار بیشتر زمانی انجام می‌شود که به یاد می‌آورید آنچه به تازگی کامیت کرده‌اید ناقص است، یا پیام کامیت را اشتباه نوشته‌اید، یا هر دو\&. درخت کاری را همان‌طور که قبل از "reset" بود باقی می‌گذارد\&. T} \fB2.\fR\h'-2n':T{ اصلاحات را روی فایل‌های درخت کاری اعمال کنید\&. T} \fB3.\fR\h'-2n':T{ دستور "reset" سرشاخه قدیمی را در \fB\&.git/ORIG_HEAD\fR کپی می‌کند؛ کامیت را با شروع از پیام لاگ آن دوباره انجام دهید\&. اگر نیازی به ویرایش بیشتر پیام ندارید، می‌توانید گزینه \fB\-C\fR را به جای آن ارسال کنید\&. .sp همچنین گزینه \fB\-\-\amend\fR در \fBgit-commit\fR(1) را ببینید\&. T} .TE .RE .PP لغو یک کامیت و تبدیل آن به یک شاخه موضوعی .RS 4 .sp .if n \{\ .RS 4 .\} .nf $ git branch topic/wip \fB(1)\fR $ git reset \-\-\hard HEAD~3 \fB(2)\fR $ git switch topic/wip \fB(3)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ شما چند کامیت ایجاد کرده‌اید، اما متوجه می‌شوید که برای حضور در شاخه \fBmaster\fR زود بودند\&. می‌خواهید کار روی آن‌ها را در یک شاخه موضوعی صیقل دهید، بنابراین شاخه \fBtopic/wip\fR را از \fBHEAD\fR فعلی ایجاد می‌کنید\&. T} \fB2.\fR\h'-2n':T{ شاخه master را به عقب بازگردانید تا از شر آن سه کامیت خلاص شوید\&. T} \fB3.\fR\h'-2n':T{ به شاخه \fBtopic/wip\fR جابه‌جا شوید و به کار ادامه دهید\&. T} .TE .RE .PP حذف دائمی کامیت‌ها .RS 4 .sp .if n \{\ .RS 4 .\} .nf $ git commit \&.\&.\&. $ git reset \-\-\hard HEAD~3 \fB(1)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ سه کامیت آخر (\fBHEAD\fR، \fBHEAD^\fR و \fBHEAD~2\fR) نامناسب بودند و هرگز نمی‌خواهید دوباره آن‌ها را ببینید\&. اگر قبلاً این کامیت‌ها را به شخص دیگری داده‌اید، این کار را انجام \fBندهید\fR\&. (برای پیامدهای این کار بخش "RECOVERING FROM UPSTREAM REBASE" را در \fBgit-rebase\fR(1) ببینید)\&. T} .TE .RE .PP لغو یک ادغام (merge) یا دریافت (pull) .RS 4 .sp .if n \{\ .RS 4 .\} .nf $ git pull \fB(1)\fR Auto\-merging nitfol CONFLICT (content): Merge conflict in nitfol Automatic merge failed; fix conflicts and then commit the result\&. $ git reset \-\-\hard \fB(2)\fR $ git pull \&. topic/branch \fB(3)\fR Updating from 41223\&.\&.\&. to 13134\&.\&.\&. Fast\-forward $ git reset \-\-\hard ORIG_HEAD \fB(4)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ تلاش برای به‌روزرسانی از upstream منجر به تعارض‌های زیادی شد؛ شما در حال حاضر آماده نبودید وقت زیادی را صرف ادغام کنید، بنابراین تصمیم می‌گیرید آن را به بعد موکول کنید\&. T} \fB2.\fR\h'-2n':T{ دستور "pull" کامیت ادغام را نساخته است، بنابراین \fBgit\fR \fBreset\fR \fB\-\-\hard\fR که مترادفی برای \fBgit\fR \fBreset\fR \fB\-\-\hard\fR \fBHEAD\fR است، این به‌هم‌ریختگی را از فایل ایندکس و درخت کاری پاک می‌کند\&. T} \fB3.\fR\h'-2n':T{ یک شاخه موضوعی را در شاخه جاری ادغام می‌کنید، که منجر به یک fast\-forward می‌شود\&. T} \fB4.\fR\h'-2n':T{ اما شما تصمیم گرفتید که شاخه موضوعی هنوز برای استفاده عمومی آماده نیست\&. دستور "pull" یا "merge" همیشه سرشاخه اصلی شاخه جاری را در \fBORIG_HEAD\fR باقی می‌گذارد، بنابراین ریست سخت به آن، فایل ایندکس و درخت کاری شما را به آن وضعیت برمی‌گرداند و سرشاخه شاخه را به آن کامیت بازنشانی می‌کند\&. T} .TE .RE .PP لغو ادغام یا pull در یک درخت کاری دارای تغییرات .RS 4 .sp .if n \{\ .RS 4 .\} .nf $ git pull \fB(1)\fR Auto\-merging nitfol Merge made by recursive\&. nitfol | 20 +++++\-\-\-\-\ \&.\&.\&. $ git reset \-\-\merge ORIG_HEAD \fB(2)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ حتی اگر تغییرات محلی در درخت کاری خود داشته باشید، وقتی می‌دانید که تغییر در شاخه دیگر با آن‌ها تداخلی ندارد، می‌توانید با خیال راحت \fBgit\fR \fBpull\fR کنید\&. T} \fB2.\fR\h'-2n':T{ پس از بررسی نتیجه ادغام، ممکن است متوجه شوید تغییر موجود در شاخه دیگر رضایت‌بخش نیست\&. اجرای \fBgit\fR \fBreset\fR \fB\-\-\hard\fR \fBORIG_HEAD\fR به شما امکان می‌دهد به جایی که بودید برگردید، اما تغییرات محلی شما را دور می‌اندازد که شما این را نمی‌خواهید\&. دستور \fBgit\fR \fBreset\fR \fB\-\-\merge\fR تغییرات محلی شما را حفظ می‌کند\&. T} .TE .RE .PP جریان کاری دچار وقفه .RS 4 فرض کنید در میانه یک تغییر بزرگ، با یک درخواست فوری برای رفع اشکال متوقف می‌شوید\&. فایل‌های درخت کاری شما در وضعیتی نیستند که بتوان آن‌ها را کامیت کرد، اما برای رفع سریع باگ باید به شاخه دیگری بروید\&. .sp .if n \{\ .RS 4 .\} .nf $ git switch feature ;# you were working in "feature" branch and $ work work work ;# got interrupted $ git commit \-a \-m "snapshot WIP" \fB(1)\fR $ git switch master $ fix fix fix $ git commit ;# commit with real log $ git switch feature $ git reset \-\-\soft HEAD^ ;# go back to WIP state \fB(2)\fR $ git reset \fB(3)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ این کامیت بعداً دور انداخته خواهد شد، بنابراین یک پیام لاگ موقتی اشکالی ندارد\&. T} \fB2.\fR\h'-2n':T{ این کار کامیت \fIWIP\fR را از تاریخچه کامیت حذف می‌کند و درخت کاری شما را به وضعیت دقیقاً قبل از ثبت آن تصویر لحظه‌ای بازمی‌گرداند\&. T} \fB3.\fR\h'-2n':T{ در این مرحله فایل ایندکس همچنان تمام تغییرات WIP را دارد که شما به عنوان \fIsnapshot WIP\fR کامیت کرده بودید\&. این کار ایندکس را به‌روزرسانی می‌کند تا فایل‌های WIP شما را به عنوان کامیت‌نشده نشان دهد\&. .sp همچنین \fBgit-stash\fR(1) را ببینید\&. T} .TE .RE .PP بازنشانی یک فایل خاص در ایندکس .RS 4 فرض کنید فایلی را به ایندکس خود اضافه کرده‌اید، اما بعداً تصمیم می‌گیرید که نمی‌خواهید آن را به کامیت خود اضافه کنید\&. می‌توانید با git reset فایل را از ایندکس حذف کرده و در عین حال تغییرات خود را حفظ کنید\&. .sp .if n \{\ .RS 4 .\} .nf $ git reset \-\-\ frotz\&.c \fB(1)\fR $ git commit \-m "Commit files in index" \fB(2)\fR $ git add frotz\&.c \fB(3)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ این کار فایل را از ایندکس حذف می‌کند در حالی که آن را در دایرکتوری کاری نگه می‌دارد\&. T} \fB2.\fR\h'-2n':T{ این کار تمام تغییرات دیگر موجود در ایندکس را کامیت می‌کند\&. T} \fB3.\fR\h'-2n':T{ فایل را دوباره به ایندکس اضافه می‌کند\&. T} .TE .RE .PP حفظ تغییرات در درخت کاری همزمان با حذف برخی کامیت‌های قبلی .RS 4 فرض کنید روی چیزی کار می‌کنید و آن را کامیت می‌کنید، و سپس کمی بیشتر به کار ادامه می‌دهید، اما اکنون فکر می‌کنید آنچه در درخت کاری خود دارید باید در شاخه دیگری باشد که هیچ ارتباطی با آنچه قبلاً کامیت کرده‌اید ندارد\&. می‌توانید شاخه جدیدی را شروع کنید و در عین حال که تغییرات را در درخت کاری خود حفظ می‌کنید، آن را ریست کنید\&. .sp .if n \{\ .RS 4 .\} .nf $ git tag start $ git switch \-c branch1 $ edit $ git commit \&.\&.\&. \fB(1)\fR $ edit $ git switch \-c branch2 \fB(2)\fR $ git reset \-\-\keep start \fB(3)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ این اولین ویرایش‌های شما را در \fBbranch1\fR کامیت می‌کند\&. T} \fB2.\fR\h'-2n':T{ در یک دنیای ایده‌آل، می‌توانستید هنگامی که \fBbranch2\fR را ساختید و به آن جابه‌جا شدید متوجه شوید که کامیت قبلی به موضوع جدید تعلق ندارد (یعنی \fBgit\fR \fBswitch\fR \fB\-c\fR \fBbranch2\fR \fBstart\fR)، اما هیچ‌کس بی‌نقص نیست\&. T} \fB3.\fR\h'-2n':T{ اما می‌توانید پس از جابه‌جایی به \fBbranch2\fR، از \fBreset\fR \fB\-\-\keep\fR برای حذف کامیت ناخواسته استفاده کنید\&. T} .TE .RE .PP تقسیم یک کامیت به توالی چند کامیت مجزا .RS 4 فرض کنید تغییرات منطقی متعددی را ایجاد کرده و همه را با هم کامیت کرده‌اید\&. سپس، بعداً تصمیم می‌گیرید که بهتر است هر تکه منطقی به کامیت مخصوص به خود اختصاص یابد\&. می‌توانید از git reset برای بازگرداندن تاریخچه به عقب بدون تغییر محتوای فایل‌های محلی خود استفاده کنید، و سپس به صورت متوالی از \fBgit\fR \fBadd\fR \fB\-p\fR برای انتخاب تعاملی تکه‌هایی که در هر کامیت گنجانده می‌شوند استفاده نمایید، در حالی که از \fBgit\fR \fBcommit\fR \fB\-c\fR برای پر کردن اولیه پیام کامیت استفاده می‌کنید\&. .sp .if n \{\ .RS 4 .\} .nf $ git reset \-N HEAD^ \fB(1)\fR $ git add \-p \fB(2)\fR $ git diff \-\-\cached \fB(3)\fR $ git commit \-c HEAD@{1} \fB(4)\fR \&.\&.\&. \fB(5)\fR $ git add \&.\&.\&. \fB(6)\fR $ git diff \-\-\cached \fB(7)\fR $ git commit \&.\&.\&. \fB(8)\fR .fi .if n \{\ .RE .\} .sp .TS tab(:); r lw(\n(.lu*75u/100u). \fB1.\fR\h'-2n':T{ ابتدا، تاریخچه را یک کامیت به عقب بازنشانی کنید تا کامیت اصلی حذف شود، اما درخت کاری با تمام تغییرات باقی بماند\&. گزینه \fB\-N\fR اطمینان می‌دهد هر فایل جدیدی که با \fBHEAD\fR اضافه شده است همچنان نشانه‌گذاری شده باشد تا \fBgit\fR \fBadd\fR \fB\-p\fR آن‌ها را پیدا کند\&. T} \fB2.\fR\h'-2n':T{ در مرحله بعد، با استفاده از قابلیت \fBgit\fR \fBadd\fR \fB\-p\fR تکه‌های diff را به صورت تعاملی برای افزودن انتخاب می‌کنیم\&. این دستور درباره هر تکه diff به ترتیب از شما سؤال می‌کند و می‌توانید از دستورات ساده‌ای مانند "yes, include this"، "No don\(cqt include this" یا حتی قابلیت بسیار قدرتمند "edit" استفاده کنید\&. T} \fB3.\fR\h'-2n':T{ پس از رضایت از تکه‌هایی که می‌خواهید شامل شوند، باید با استفاده از \fBgit\fR \fBdiff\fR \fB\-\-\cached\fR آنچه را که برای اولین کامیت آماده شده بررسی کنید\&. این دستور تمام تغییراتی را نشان می‌دهد که به ایندکس منتقل شده‌اند و در آستانه کامیت شدن هستند\&. T} \fB4.\fR\h'-2n':T{ سپس، تغییرات ذخیره‌شده در ایندکس را کامیت کنید\&. گزینه \fB\-c\fR مشخص می‌کند که پیام کامیت از پیام اصلی که در کامیت اول با آن شروع کرده بودید پیش‌پر شود\&. این کار برای جلوگیری از تایپ مجدد آن مفید است\&. عبارت \fBHEAD@\fR{1} نماد خاصی برای کامیتی است که \fBHEAD\fR پیش از کامیت بازنشانی اصلی در آن قرار داشت (۱ تغییر قبل)\&. برای جزئیات بیشتر به \fBgit-reflog\fR(1) مراجعه کنید\&. همچنین می‌توانید از هر مرجع کامیت معتبر دیگری استفاده کنید\&. T} \fB5.\fR\h'-2n':T{ می‌توانید مراحل ۲ تا ۴ را چندین بار تکرار کنید تا کد اصلی را به هر تعداد کامیت تقسیم نمایید\&. T} \fB6.\fR\h'-2n':T{ اکنون شما بسیاری از تغییرات را به کامیت‌های اختصاصی خود تفکیک کرده‌اید، و برای انتخاب تمام تغییرات کامیت‌نشده باقی‌مانده ممکن است دیگر نیازی به استفاده از حالت وصله در \fBgit\fR \fBadd\fR نداشته باشید\&. T} \fB7.\fR\h'-2n':T{ یک بار دیگر بررسی کنید تا مطمئن شوید آنچه می‌خواهید را گنجانده‌اید\&. همچنین ممکن است بخواهید اطمینان حاصل کنید که git diff هیچ تغییر باقی‌مانده‌ای را برای کامیت بعدی نشان نمی‌دهد\&. T} \fB8.\fR\h'-2n':T{ و سرانجام آخرین کامیت را بسازید\&. T} .TE .RE .SH "بحث و بررسی (DISCUSSION)" .sp جدول‌های زیر نشان می‌دهند هنگام اجرای دستور زیر چه اتفاقی می‌افتد: .sp .if n \{\ .RS 4 .\} .nf git reset \-\-\option target .fi .if n \{\ .RE .\} .sp .sp برای بازنشانی \fBHEAD\fR به یک کامیت دیگر (\fBtarget\fR) با گزینه‌های مختلف بازنشانی بسته به وضعیت فایل‌ها\&. .sp در این جدول‌ها، \fBA\fR، \fBB\fR، \fBC\fR و \fBD\fR وضعیت‌های متفاوتی از یک فایل هستند\&. برای مثال، سطر اول جدول نخست به این معنی است که اگر یک فایل در درخت کاری در وضعیت \fBA\fR، در ایندکس در وضعیت \fBB\fR، در \fBHEAD\fR در وضعیت \fBC\fR و در target در وضعیت \fBD\fR باشد، آنگاه \fBgit\fR \fBreset\fR \fB\-\-\soft\fR \fBtarget\fR فایل را در درخت کاری در وضعیت \fBA\fR و در ایندکس در وضعیت \fBB\fR باقی می‌گذارد\&. این دستور \fBHEAD\fR (یعنی سرشاخه شاخه فعلی، در صورت حضور در یکی از شاخه‌ها) را به \fBtarget\fR (که فایل را در وضعیت \fBD\fR دارد) بازنشانی می‌کند (یعنی انتقال می‌دهد)\&. .sp .if n \{\ .RS 4 .\} .nf working index HEAD target working index HEAD \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ A B C D \-\-\soft A B D \-\-\mixed A D D \-\-\hard D D D \-\-\merge (disallowed) \-\-\keep (disallowed) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf working index HEAD target working index HEAD \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ A B C C \-\-\soft A B C \-\-\mixed A C C \-\-\hard C C C \-\-\merge (disallowed) \-\-\keep A C C .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf working index HEAD target working index HEAD \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ B B C D \-\-\soft B B D \-\-\mixed B D D \-\-\hard D D D \-\-\merge D D D \-\-\keep (disallowed) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf working index HEAD target working index HEAD \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ B B C C \-\-\soft B B C \-\-\mixed B C C \-\-\hard C C C \-\-\merge C C C \-\-\keep B C C .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf working index HEAD target working index HEAD \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ B C C D \-\-\soft B C D \-\-\mixed B D D \-\-\hard D D D \-\-\merge (disallowed) \-\-\keep (disallowed) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf working index HEAD target working index HEAD \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ B C C C \-\-\soft B C C \-\-\mixed B C C \-\-\hard C C C \-\-\merge B C C \-\-\keep B C C .fi .if n \{\ .RE .\} .sp دستور \fBgit\fR \fBreset\fR \fB\-\-\merge\fR برای استفاده هنگام بازنشانی از یک ادغام دارای تعارض در نظر گرفته شده است\&. هر عملیات ادغام تضمین می‌کند فایل درخت کاری که در ادغام دخیل است، پیش از شروع عملیات نسبت به ایندکس تغییر محلی نداشته باشد، و نتیجه را در درخت کاری می‌نویسد\&. بنابراین اگر تفاوتی بین ایندکس و target و همچنین بین ایندکس و درخت کاری مشاهده کنیم، به این معنی است که ما از وضعیتی که یک عملیات ادغام پس از شکست با تعارض باقی گذاشته بازنشانی نمی‌کنیم\&. به همین دلیل در این حالت گزینه \fB\-\-\merge\fR را مجاز نمی‌دانیم\&. .sp دستور \fBgit\fR \fBreset\fR \fB\-\-\keep\fR برای استفاده هنگام حذف برخی از آخرین کامیت‌ها در شاخه فعلی در عین حفظ تغییرات در درخت کاری در نظر گرفته شده است\&. اگر تعارض احتمالی بین تغییرات موجود در کامیتی که می‌خواهیم حذف کنیم و تغییرات موجود در درخت کاری که می‌خواهیم نگه داریم وجود داشته باشد، بازنشانی غیرمجاز است\&. به همین دلیل اگر هم بین درخت کاری و \fBHEAD\fR و هم بین \fBHEAD\fR و target تغییراتی وجود داشته باشد، غیرمجاز است\&. برای ایمنی بیشتر، در صورت وجود ورودی‌های ادغام‌نشده نیز غیرمجاز است\&. .sp جدول‌های زیر نشان می‌دهند هنگامی که ورودی‌های ادغام‌نشده وجود دارند چه اتفاقی می‌افتد: .sp .if n \{\ .RS 4 .\} .nf working index HEAD target working index HEAD \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ X U A B \-\-\soft (disallowed) \-\-\mixed X B B \-\-\hard B B B \-\-\merge B B B \-\-\keep (disallowed) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf working index HEAD target working index HEAD \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\ X U A A \-\-\soft (disallowed) \-\-\mixed X A A \-\-\hard A A A \-\-\merge A A A \-\-\keep (disallowed) .fi .if n \{\ .RE .\} .sp \fBX\fR به معنای هر وضعیتی و \fBU\fR به معنای ایندکس ادغام‌نشده است\&. .SH "گیت (GIT)" .sp بخشی از مجموعه \fBgit\fR(1)