'\" t .\" Title: git-history .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2026-06-29 .\" Manual: راهنمای گیت .\" Source: Git 2.55.0 .\" Language: Persian .\" .TH "GIT\-HISTORY" "1" "2026\-06\-29" "Git 2\&.55\&.0" "دستورات عمومی کاربر" .\" ----------------------------------------------------------------- .\" * 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-history \- آزمایشی: بازنویسی تاریخچه .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fBgit\fR \fBhistory\fR \fBfixup\fR \fI\fR [\fB\-\-dry\-run\fR] [\fB\-\-update\-refs=\fR(\fBbranches\fR|\fBhead\fR)] [\fB\-\-reedit\-message\fR] [\fB\-\-empty=\fR(\fBdrop\fR|\fBkeep\fR|\fBabort\fR)] \fBgit\fR \fBhistory\fR \fBreword\fR \fI\fR [\fB\-\-dry\-run\fR] [\fB\-\-update\-refs=\fR(\fBbranches\fR|\fBhead\fR)] \fBgit\fR \fBhistory\fR \fBsplit\fR \fI\fR [\fB\-\-dry\-run\fR] [\fB\-\-update\-refs=\fR(\fBbranches\fR|\fBhead\fR)] [\fB\-\-\fR] [\fI\fR\&...] .fi .sp .SH "توضیحات (DESCRIPTION)" .sp بازنویسی تاریخچه با بازآرایی یا تغییر کامیت‌های مشخص در تاریخچه\&. .sp این دستور آزمایشی است\&. رفتار آن ممکن است تغییر کند\&. .sp این دستور با \fBgit-rebase\fR(1) مرتبط است از این جهت که هر دو دستور می‌توانند برای بازنویسی تاریخچه استفاده شوند؛ با این حال چند تفاوت عمده وجود دارد: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} بیشتر زیردستورهای \fBgit-history\fR(1) می‌توانند در یک مخزن لخت (bare repository) کار کنند، زیرا نیازی به لمس نمایه (index) یا درخت کاری (worktree) ندارند\&. زیردستور \fBfixup\fR از این قاعده مستثنی است، زیرا تغییرات مرحله‌بندی‌شده (staged) را از نمایه می‌خواند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBgit-history\fR(1) در حال حاضر هیچ‌کدام از \fBgithooks\fR(5) را اجرا نمی‌کند\&. این امر ممکن است در آینده تغییر کند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBgit-history\fR(1) به‌طور پیش‌فرض تمام شاخه‌هایی را که از نوادگان کامیت اصلی هستند به‌روزرسانی می‌کند تا به کامیت بازنویسی‌شده اشاره کنند\&. .RE .sp به‌طور کلی، \fBgit-history\fR(1) هدف دارد رویکردی مشخص‌تر برای اصلاح تاریخچه کامیت شما ارائه دهد که استفاده از آن در مقایسه با \fBgit-rebase\fR(1) به‌طور کلی ساده‌تر است\&. .sp اگر می‌خواهید محدوده‌ای از کامیت‌ها را بر روی یک پایه متفاوت مجدداً اعمال کنید از \fBgit-rebase\fR(1) استفاده کنید، یا اگر می‌خواهید محدوده‌ای از کامیت‌ها را هم‌زمان ویرایش کنید از rebaseهای تعاملی بهره ببرید\&. .SH "محدودیت‌ها (LIMITATIONS)" .sp این دستور (هنوز) با تاریخچه‌هایی که شامل ادغام هستند کار نمی‌کند\&. باید در عوض از \fBgit-rebase\fR(1) با پرچم \fB\-\-rebase\-merges\fR استفاده کنید\&. .sp علاوه بر این، این دستور از عملیاتی که می‌توانند منجر به تعارض ادغام (merge conflict) شوند پشتیبانی نمی‌کند\&. این محدودیت از روی طراحی است، زیرا بازنویسی‌های تاریخچه به عنوان عملیات دارای وضعیت در نظر گرفته نشده‌اند\&. این محدودیت زمانی می‌تواند برداشته شود که گیت قابلیت تعارض‌های تراز اول (first\-class conflicts) را به دست آورد (اگر به دست آورد)\&. .sp هنگام استفاده از \fBfixup\fR با \fB\-\-empty=drop\fR، حذف کامیت ریشه هنوز پشتیبانی نمی‌شود\&. .SH "دستورات (COMMANDS)" .sp دستورات زیر برای بازنویسی تاریخچه به روش‌های مختلف در دسترس هستند: .PP \fBfixup\fR \fI\fR .RS 4 تغییرات مرحله‌بندی‌شده فعلی را روی کامیت مشخص‌شده اعمال می‌کند\&. ماهیت این کار مشابه \fBgit\fR \fBcommit\fR \fB\-\-fixup=\fR\fI\fR و در ادامه \fBgit\fR \fBrebase\fR \fB\-\-autosquash\fR \fI\fR\fB~\fR است\&. تغییرات با انجام یک ادغام سه‌طرفه میان کامیت HEAD، کامیت مقصد و درخت تولیدشده از تغییرات مرحله‌بندی‌شده، روی کامیت مقصد اعمال می‌شوند\&. .sp پیام کامیت و نویسندگی کامیت مقصد به‌طور پیش‌فرض حفظ می‌شوند، مگر اینکه \fB\-\-reedit\-message\fR را مشخص کنید\&. .sp اگر اعمال تغییرات مرحله‌بندی‌شده منجر به تعارض شود، دستور با یک خطا متوقف می‌شود\&. تمام شاخه‌هایی که از نوادگان کامیت اصلی هستند به‌روزرسانی می‌شوند تا به تاریخچه بازنویسی‌شده اشاره کنند\&. .RE .PP \fBreword\fR \fI\fR .RS 4 پیام کامیت مشخص‌شده را بازنویسی می‌کند\&. تمام جزئیات دیگر این کامیت بدون تغییر باقی می‌مانند\&. این دستور یک ویرایشگر را به همراه پیام فعلی آن کامیت اجرا می‌کند\&. .RE .PP \fBsplit\fR \fI\fR [\fB\-\-\fR] [\fI\fR\&.\&.\&.] .RS 4 کامیت را با انتخاب هانک‌های (hunks) ایجادشده توسط آن که به کامیت تفکیک‌شده جدید منتقل خواهند شد، به‌صورت تعاملی به دو کامیت تقسیم می‌کند\&. این هانک‌ها سپس در یک کامیت جدید نوشته می‌شوند که والد کامیت قبلی می‌شود\&. کامیت اصلی دست‌نخورده باقی می‌ماند، به جز اینکه والد آن کامیت جدید تفکیک‌شده خواهد بود\&. .sp پیام‌های کامیت مربوط به کامیت‌های تفکیک‌شده با راه‌اندازی ویرایشگر پیکربندی‌شده درخواست می‌شوند\&. نویسندگی کامیت همانند کامیت اصلی خواهد بود\&. .sp در صورت ارسال، \fI\fR می‌تواند برای محدود کردن اینکه کدام تغییرات باید از کامیت اصلی تفکیک شوند استفاده شود\&. فایل‌هایی که با هیچ‌یک از pathspecها مطابقت ندارند بخشی از کامیت اصلی باقی خواهند ماند\&. برای جزئیات بیشتر، مدخل \fIpathspec\fR در \fBgitglossary\fR(7) را ببینید\&. .sp انتخاب همه هانک‌ها یا هیچ‌کدام از آن‌ها نامعتبر است، زیرا منجر به خالی شدن یکی از کامیت‌ها خواهد شد\&. .RE .SH "گزینه‌ها (OPTIONS)" .PP \fB\-\-dry\-run\fR .RS 4 هیچ ارجاعی را به‌روزرسانی نمی‌کند، بلکه در عوض به‌روزرسانی‌های ارجاع را در قالبی چاپ می‌کند که می‌تواند توسط \fBgit-update-ref\fR(1) مصرف شود\&. اشیاء جدید مورد نیاز در مخزن نوشته خواهند شد، بنابراین اعمال این به‌روزرسانی‌های ارجاع چاپ‌شده به‌طور کلی ایمن است\&. .RE .PP \fB\-\-reedit\-message\fR .RS 4 یک ویرایشگر را برای تغییر پیام کامیت مقصد باز می‌کند\&. .RE .PP \fB\-\-empty=\fR(\fBdrop\fR|\fBkeep\fR|\fBabort\fR) .RS 4 کنترل می‌کند هنگامی که یک کامیت در نتیجه fixup خالی می‌شود چه اتفاقی رخ دهد\&. این حالت می‌تواند در دو وضعیت پیش بیاید: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} خود مقصد fixup خالی می‌شود زیرا تغییرات مرحله‌بندی‌شده دقیقاً تمام تغییرات ایجادشده توسط آن کامیت را خنثی می‌کنند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} یک کامیت نواده در حین بازپخش خالی می‌شود زیرا همان تغییری را ایجاد کرده بود که هم‌اکنون در یک نیا اصلاح شده است\&. .RE .sp با \fBdrop\fR (پیش‌فرض)، کامیت‌های خالی از تاریخچه بازنویسی‌شده حذف می‌شوند\&. نوادگان یک کامیت مقصد حذف‌شده مستقیماً روی والد مقصد بازپخش می‌شوند\&. توجه داشته باشید که حذف کامیت ریشه پشتیبانی نمی‌شود؛ بخش محدودیت‌ها (LIMITATIONS) را ببینید\&. .sp با \fBkeep\fR، کامیت‌های خالی همان‌طور که هستند در تاریخچه بازنویسی‌شده حفظ می‌شوند\&. .sp با \fBabort\fR، اگر هر کامیتی خالی شود، دستور با خطا متوقف می‌شود\&. .RE .PP \fB\-\-update\-refs=\fR(\fBbranches\fR|\fBhead\fR) .RS 4 کنترل می‌کند که در صورت وجود، کدام ارجاع‌ها توسط دستور به‌روزرسانی شوند\&. با \fBbranches\fR، تمام شاخه‌های محلی که به کامیت‌های نواده کامیت اصلی اشاره دارند بازنویسی خواهند شد\&. با \fBhead\fR، تنها ارجاع فعلی \fBHEAD\fR بازنویسی می‌شود\&. پیش‌فرض \fBbranches\fR است\&. .RE .SH "مثال‌ها (EXAMPLES)" .SS "اصلاح یک کامیت (Fixup a commit)" .sp .if n \{\ .RS 4 .\} .nf $ git log \-\-oneline \-\-stat abc1234 (HEAD \-> main) third third\&.txt | 1 + def5678 second second\&.txt | 1 + ghi9012 first first\&.txt | 1 + $ echo "change" >>unrelated\&.txt $ git add unrelated\&.txt $ git history fixup ghi9012 $ git log \-\-oneline \-\-stat jkl3456 (HEAD \-> main) third third\&.txt | 1 + mno7890 second second\&.txt | 1 + pqr1234 first first\&.txt | 1 + unrelated\&.txt | 1 + .fi .if n \{\ .RE .\} .sp .sp افزودن مرحله‌بندی‌شده \fBunrelated\&.txt\fR در کامیت \fBfirst\fR ادغام شده است\&. تمام کامیت‌های نواده بر روی تاریخچه بازنویسی‌شده بازپخش شده‌اند\&. .SS "تفکیک یک کامیت (Split a commit)" .sp .if n \{\ .RS 4 .\} .nf $ git log \-\-stat \-\-oneline 3f81232 (HEAD \-> main) original bar | 1 + foo | 1 + 2 files changed, 2 insertions(+) $ git history split HEAD diff \-\-git a/bar b/bar new file mode 100644 index 0000000\&.\&.5716ca5 \-\-\- /dev/null +++ b/bar @@ \-0,0 +1 @@ +bar (1/1) Stage addition [y,n,q,a,d,p,?]? y diff \-\-git a/foo b/foo new file mode 100644 index 0000000\&.\&.257cc56 \-\-\- /dev/null +++ b/foo @@ \-0,0 +1 @@ +foo (1/1) Stage addition [y,n,q,a,d,p,?]? n $ git log \-\-stat \-\-oneline 7cebe64 (HEAD \-> main) original foo | 1 + 1 file changed, 1 insertion(+) d1582f3 split\-out commit bar | 1 + 1 file changed, 1 insertion(+) .fi .if n \{\ .RE .\} .sp .SH "همچنین ببینید (SEE ALSO)" .sp \fBgit\fR(1), \fBgit\-rebase\fR(1), \fBgit\-update\-ref\fR(1), \fBgithooks\fR(5), \fBgitglossary\fR(7) .SH "گیت (GIT)" .sp بخشی از مجموعه \fBgit\fR(1)