'\" t
.\" Title: git-rerere
.\" 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\-RERERE" "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-rerere \- استفاده مجدد از راهحلهای ثبتشده برای تضادهای ادغام
.SH "خلاصه دستور (SYNOPSIS)"
.sp
.nf
\fIgit rerere\fR [clear | forget \&... | diff | status | remaining | gc]
.fi
.sp
.SH "توضیحات (DESCRIPTION)"
.sp
در یک گردش کاری که از شاخههای موضوعی با طول عمر نسبتاً طولانی استفاده میکند، توسعهدهنده گاهی نیاز دارد تا زمان نهایی شدن شاخههای موضوعی (چه ادغام در شاخه «انتشار» یا ارسال و پذیرفته شدن در بالادست)، تضادهای مشابه را بارها و بارها حل کند\&.
.sp
این دستور در این فرآیند با ثبت نتایج ادغام خودکار دارای تضاد و نتایج متناظر حل دستی در ادغام دستی اولیه، و اعمال راهحلهای دستی از قبل ثبتشده بر روی نتایج متناظر ادغام خودکار، به توسعهدهنده کمک میکند\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBنکته\fR
.ps -1
.br
.sp
برای فعالسازی این دستور، باید متغیر پیکربندی \fBrerere\&.enabled\fR را تنظیم کنید\&.
.sp .5v
.RE
.SH "دستورها (COMMANDS)"
.sp
بهطور معمول،
\fIgit rerere\fR
بدون آرگومان یا دخالت کاربر اجرا میشود\&. با این حال، دارای چندین دستور فرعی است که به کاربران امکان تعامل با وضعیت کاری آن را میدهد\&.
.PP
\fIclear\fR
.RS 4
در صورتی که قرار است حل یک ادغام لغو شود، فرادادههای مورد استفاده rerere را بازنشانی میکند\&. فراخوانی
\fIgit am [\-\-skip|\-\-abort]\fR
یا
\fIgit rebase [\-\-skip|\-\-abort]\fR
بهطور خودکار این دستور را فراخوانی میکند\&.
.RE
.PP
\fIforget\fR
.RS 4
راهحلهای تضادی را که rerere برای تضادهای فعلی در مسیرهای منطبق با ثبت کرده است، بازنشانی میکند\&.
.RE
.PP
\fIdiff\fR
.RS 4
تفاوتها را برای وضعیت فعلی حل تضاد نمایش میدهد\&. این دستور برای پیگیری تغییراتی که هنگام حل تضادها توسط کاربر ایجاد شده مفید است\&. آرگومانهای اضافی مستقیماً به دستور
\fIdiff\fR
سیستم که در PATH نصب شده ارسال میشوند\&.
.RE
.PP
\fIstatus\fR
.RS 4
مسیرهای دارای تضادی را که rerere راهحل ادغام آنها را ثبت خواهد کرد، چاپ میکند\&.
.RE
.PP
\fIremaining\fR
.RS 4
مسیرهای دارای تضادی را که توسط rerere بهطور خودکار حل نشدهاند، چاپ میکند\&. این شامل مسیرهایی است که راهحل آنها توسط rerere قابل ردیابی نیست، مانند زیرماژولهای دارای تضاد\&.
.RE
.PP
\fIgc\fR
.RS 4
سوابق ادغامهای دارای تضادی را که مدتها پیش رخ دادهاند، هرس میکند\&. بهطور پیشفرض، تضادهای حلنشده با عمر بیش از ۱۵ روز و تضادهای حلشده با عمر بیش از ۶۰ روز هرس میشوند\&. این مقادیر پیشفرض به ترتیب از طریق متغیرهای پیکربندی
\fBgc\&.rerereUnresolved\fR
و
\fBgc\&.rerereResolved\fR
کنترل میشوند\&.
.RE
.SH "بحث و بررسی (DISCUSSION)"
.sp
هنگامی که شاخه موضوعی (topic) شما ناحیهای همپوشان با تغییراتی که شاخه master (یا بالادست) از زمان انشعاب شاخه موضوعی روی آن اعمال کرده را دستکاری میکند، ممکن است بخواهید پیش از آماده شدن شاخه موضوعی برای ارسال به بالادست، آن را با آخرین نسخه شاخه master آزمایش کنید:
.sp
.if n \{\
.RS 4
.\}
.nf
o\-\-\-*\-\-\-o topic
/
o\-\-\-o\-\-\-o\-\-\-*\-\-\-o\-\-\-o master
.fi
.if n \{\
.RE
.\}
.sp
.sp
برای چنین آزمایشی، باید به نحوی شاخههای master و topic را ادغام کنید\&. یک راه برای انجام این کار، دریافت (pull) شاخه master در شاخه موضوعی است:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git switch topic
$ git merge master
o\-\-\-*\-\-\-o\-\-\-+ topic
/ /
o\-\-\-o\-\-\-o\-\-\-*\-\-\-o\-\-\-o master
.fi
.if n \{\
.RE
.\}
.sp
.sp
کامیتهای علامتگذاریشده با
\fB*\fR
همان ناحیه از همان فایل را تغییر میدهند؛ شما باید هنگام ایجاد کامیت علامتگذاریشده با
\fB+\fR
تضادها را حل کنید\&. سپس میتوانید نتیجه را آزمایش کنید تا مطمئن شوید کارهای در دست اقدام شما با آنچه در آخرین نسخه master وجود دارد همچنان به درستی کار میکند\&.
.sp
پس از این ادغام آزمایشی، دو راه برای ادامه کار روی شاخه موضوعی وجود دارد\&. سادهترین راه این است که کارهای بعدی را روی همان کامیت ادغام آزمایشی
\fB+\fR
بنا کنید، و هنگامی که کار شما در شاخه موضوعی در نهایت آماده شد، شاخه موضوعی را به master بیاورید (pull کنید)، یا از بالادست بخواهید که تغییرات را از شما دریافت کند\&. با این حال، تا آن زمان ممکن است master یا بالادست پس از ادغام آزمایشی
\fB+\fR
جلوتر رفته باشند، که در این صورت نمودار نهایی کامیتها شبیه به این خواهد بود:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git switch topic
$ git merge master
$ \&.\&.\&. work on both topic and master branches
$ git switch master
$ git merge topic
o\-\-\-*\-\-\-o\-\-\-+\-\-\-o\-\-\-o topic
/ / \e
o\-\-\-o\-\-\-o\-\-\-*\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-+ master
.fi
.if n \{\
.RE
.\}
.sp
.sp
اما هنگامی که شاخه موضوعی شما طولانیمدت باشد، در نهایت تعداد زیادی از این کامیتهای «Merge from master» در آن وجود خواهد داشت که تاریخچه توسعه را به شکلی غیرضروری شلوغ و نامرتب میکند\&. خوانندگان فهرست پستی کرنل لینوکس ممکن است به یاد داشته باشند که لینوس زمانی که یکی از نگهدارندگان زیرسیستم درخواست دریافت از شاخهای پر از «ادغامهای بیهوده» کرده بود، از چنین ادغامهای آزمایشی بسیار مکرری گلایه کرد\&.
.sp
به عنوان یک راهکار جایگزین، برای تمیز نگه داشتن شاخه موضوعی از ادغامهای آزمایشی، میتوانید ادغام آزمایشی را دور بیندازید و ساخت کارهای بعدی را روی نوک شاخه قبل از ادغام آزمایشی ادامه دهید:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git switch topic
$ git merge master
$ git reset \-\-hard HEAD^ ;# rewind the test merge
$ \&.\&.\&. work on both topic and master branches
$ git switch master
$ git merge topic
o\-\-\-*\-\-\-o\-\-\-\-\-\-\-o\-\-\-o topic
/ \e
o\-\-\-o\-\-\-o\-\-\-*\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-+ master
.fi
.if n \{\
.RE
.\}
.sp
.sp
این کار باعث میشود در نهایت هنگامی که شاخه موضوعی شما آماده شد و با شاخه master ادغام گردید، تنها یک کامیت ادغام باقی بماند\&. این ادغام مستلزم آن است که تضادی را که توسط کامیتهای علامتگذاریشده با
\fB*\fR
ایجاد شده است، حل کنید\&. با این حال، این تضاد اغلب همان تضادی است که قبلاً هنگام ایجاد ادغام آزمایشی که آن را دور انداختید، حل کرده بودید\&. دستور
\fIgit rerere\fR
به شما کمک میکند تا این ادغام نهایی دارای تضاد را با استفاده از اطلاعات حل دستی قبلی خود حل کنید\&.
.sp
اجرای دستور
\fIgit rerere\fR
بلافاصله پس از یک ادغام خودکار دارای تضاد، فایلهای درخت کاری دچار تضاد را همراه با نشانگرهای معمول تضاد یعنی <<<<<<<،
\fB=======\fR
و >>>>>>> در آنها ثبت میکند\&. بعداً، پس از اتمام حل تضادها، اجرای مجدد
\fIgit rerere\fR
وضعیت حلشده این فایلها را ثبت خواهد کرد\&. فرض کنید هنگام ایجاد ادغام آزمایشی master در شاخه موضوعی این کار را انجام دادهاید\&.
.sp
دفعه بعد، پس از مشاهده همان ادغام خودکار دارای تضاد، اجرای
\fIgit rerere\fR
یک ادغام سهطرفه (three\-way merge) بین ادغام خودکار متضاد قبلی، راهحل دستی قبلی، و ادغام خودکار متضاد فعلی انجام خواهد داد\&. اگر این ادغام سهطرفه بدون مشکل حل شود، نتیجه در فایل درخت کاری شما نوشته میشود و بنابراین نیازی به حل دستی آن نخواهید داشت\&. توجه داشته باشید که
\fIgit rerere\fR
فایل نمایه (index) را تغییر نمیدهد، بنابراین همچنان لازم است پس از اطمینان، بررسیهای نهایی سلامت را با
\fBgit\fR \fBdiff\fR
(یا
\fBgit\fR \fBdiff\fR \fB\-c\fR)
انجام دهید و در صورت رضایت، از
\fIgit add\fR
استفاده کنید\&.
.sp
به عنوان یک اقدام تسهیلکننده،
\fIgit merge\fR
هنگام خروج پس از شکست در ادغام خودکار، بهطور خودکار
\fIgit rerere\fR
را فراخوانی میکند؛ سپس
\fIgit rerere\fR
اگر تضاد جدید باشد حل دستی را ثبت میکند، و اگر جدید نباشد از حل دستی قبلی مجدداً استفاده مینماید\&. همچنین
\fIgit commit\fR
هنگام ثبت نتیجه یک ادغام،
\fIgit rerere\fR
را فراخوانی میکند\&. معنای این امر آن است که نیازی نیست کار خاصی انجام دهید (بهجز فعالسازی متغیر پیکربندی
\fBrerere\&.enabled\fR)\&.
.sp
در مثال ما، وقتی ادغام آزمایشی را انجام میدهید، راهحل دستی ثبت میشود و تا زمانی که راهحل ثبتشده همچنان قابل اعمال باشد، بعداً هنگام انجام ادغام واقعی با شاخههای بهروزشده master و topic، دوباره مورد استفاده قرار خواهد گرفت\&.
.sp
اطلاعاتی که
\fIgit rerere\fR
ثبت میکند هنگام اجرای
\fIgit rebase\fR
نیز استفاده میشود\&. پس از دور انداختن ادغام آزمایشی و ادامه توسعه روی شاخه موضوعی:
.sp
.if n \{\
.RS 4
.\}
.nf
o\-\-\-*\-\-\-o\-\-\-\-\-\-\-o\-\-\-o topic
/
o\-\-\-o\-\-\-o\-\-\-*\-\-\-o\-\-\-o\-\-\-o\-\-\-o master
$ git rebase master topic
o\-\-\-*\-\-\-o\-\-\-\-\-\-\-o\-\-\-o topic
/
o\-\-\-o\-\-\-o\-\-\-*\-\-\-o\-\-\-o\-\-\-o\-\-\-o master
.fi
.if n \{\
.RE
.\}
.sp
.sp
میتوانید دستور
\fBgit\fR \fBrebase\fR \fBmaster\fR \fBtopic\fR
را اجرا کنید تا قبل از آماده شدن شاخه موضوعی برای ارسال به بالادست، خود را بهروز کنید\&. این کار منجر به عقبگرد به یک ادغام سهطرفه میشود و به همان شیوه ادغام آزمایشی که قبلاً حل کردید دچار تضاد خواهد شد\&. در این حالت
\fIgit rerere\fR
توسط
\fIgit rebase\fR
اجرا میشود تا به شما در حل این تضاد کمک کند\&.
.sp
\fB[نکته]\fR
\fIgit rerere\fR
برای تشخیص تضاد به نشانگرهای تضاد در فایل متکی است\&. اگر فایل از قبل دارای خطوطی باشد که شبیه به خطوط نشانگرهای تضاد هستند، ممکن است
\fIgit rerere\fR
در ثبت راهحل تضاد ناموفق باشد\&. برای دور زدن این مشکل، میتوان از تنظیم
\fBconflict\-marker\-size\fR
در
\fBgitattributes\fR(5)
استفاده کرد\&.
.SH "همچنین ببینید (SEE ALSO)"
.sp
\fBgitattributes\fR(5),
\fBgit-merge\fR(1),
\fBgit-rebase\fR(1)
.SH "گیت (GIT)"
.sp
بخشی از مجموعه \fBgit\fR(1)