'\" t
.\" Title: git-absorb
.\" Author: [see the "AUTHOR" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot
.\" Date: 03/27/2026
.\" Manual: git absorb
.\" Source: git-absorb
.\" Language: Persian
.\"
.TH "GIT\-ABSORB" "1" "03/27/2026" "git\-absorb" "git absorb"
.\" -----------------------------------------------------------------
.\" * 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-absorb \- ادغام خودکار تغییرات در کامیتهای قبلی متناظر
.SH "خلاصه دستور (SYNOPSIS)"
.sp
.nf
\fIgit absorb\fR [FLAGS] [OPTIONS]
.fi
.SH "توضیحات (DESCRIPTION)"
.sp
شما یک شاخهٔ ویژگی با چند کامیت دارید\&. همتیمی شما شاخه را بررسی کرده و چند باگ را مشخص کرده است\&. شما اصلاحاتی برای این باگها دارید، اما نمیخواهید همهٔ آنها را در یک کامیت مبهم با پیام «fixes» قرار دهید، زیرا به کامیتهای اتمیک (atomic commits) باور دارید\&. به جای یافتن دستی هشهای SHA کامیتها برای
.B git commit \-\-fixup
یا اجرای دستی یک rebase تعاملی، این کار را انجام دهید:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git add $FILES_YOU_FIXED
$ git absorb \-\-and\-rebase
(or)
$ git absorb
$ git rebase \-i \-\-autosquash master
.fi
.if n \{\
.RE
.\}
.sp
دستور
.B git absorb
بهطور خودکار تشخیص میدهد که کدام کامیتها برای تغییر ایمن هستند و کدام تغییرات نمایهبندیشده (indexed changes) به هر یک از آن کامیتها تعلق دارند\&. سپس برای هر یک از آن تغییرات، کامیتهای
.B fixup!
مینویسد\&. در صورتی که به آن اطمینان کامل ندارید، میتوانید خروجی آن را بهصورت دستی بررسی کنید و سپس با قابلیت درونساخت
.B autosquash
در گیت، کامیتهای اصلاحی را در شاخهٔ ویژگی خود ادغام نمایید\&.
.SH "فلگها (FLAGS)"
.PP
\-r, \-\-and\-rebase
.RS 4
در صورت موفقیتآمیز بودن، rebase را اجرا میکند\&. همچنین بخش REBASE_OPTIONS را در ادامه ببینید\&.
.RE
.PP
\-n, \-\-dry\-run
.RS 4
هیچ تغییر واقعی اعمال نمیکند (اجرای آزمایشی)\&.
.RE
.PP
\-\-no\-limit
.RS 4
محدودیت پشتهٔ جذب (absorb stack) را حذف میکند\&. در صورت استفاده همراه با
\-\-base
بیاثر است\&.
.sp
این گزینه تمام کامیتها را تا رسیدن به کامیت ریشه (root)، کامیت ادغام (merge) یا کامیتی از نویسندهای دیگر (مگر اینکه از
\-\-force\-author
استفاده شود) در نظر میگیرد\&.
.sp
به همین دلیل هنگام استفاده از این پرچم باید احتیاط کنید\&.
.RE
.PP
\-\-force\-author
.RS 4
تولید fixup برای کامیتهایی که توسط شما ایجاد نشدهاند\&.
.RE
.PP
\-\-force\-detach
.RS 4
تولید fixup حتی زمانی که HEAD روی یک شاخه نیست (وضعیت جداشده یا detached HEAD)\&.
.RE
.PP
\-F, \-\-one\-fixup\-per\-commit
.RS 4
تنها یک کامیت fixup به ازای هر کامیت تولید میکند\&.
.RE
.PP
\-f, \-\-force
.RS 4
تمام بررسیهای ایمنی را نادیده میگیرد؛ گویی تمام پرچمهای
\-\-force\-*
مشخص شدهاند\&. برای درک اثر کامل استفاده از
\-\-force
توضیحات آن پرچمها را مطالعه کنید\&.
.RE
.PP
\-s, \-\-squash
.RS 4
به جای کامیتهای fixup، کامیتهای squash ایجاد میکند\&.
.sp
هنگامی که این پرچم استفاده میشود، در سراسر این مستندات عبارت «کامیت fixup» میتواند به صورت «کامیت squash» خوانده شود\&. تمام تنظیمات مربوط به کامیتهای fixup در این حالت برای کامیتهای squash اعمال خواهد شد\&.
.RE
.PP
\-w, \-\-whole\-file
.RS 4
اولین کامیتی را که فایلی یکسان با تکهکد (hunk) جاری را تغییر داده است مطابقت میدهد\&. از این گزینه با احتیاط استفاده کنید!
.RE
.PP
\-h, \-\-help
.RS 4
اطلاعات راهنما را چاپ میکند\&.
.RE
.PP
\-V, \-\-version
.RS 4
اطلاعات نسخه را چاپ میکند\&.
.RE
.PP
\-v, \-\-verbose
.RS 4
نمایش خروجی با جزئیات بیشتر\&.
.RE
.SH "گزینهها (OPTIONS)"
.PP
\-b , \-\-base
.RS 4
استفاده از این کامیت به عنوان پایهٔ پشتهٔ جذب (absorb stack)\&.
.RE
.PP
\-m , \-\-message
.RS 4
یک متن ساده برای بدنهٔ پیام کامیت که برای
\fBall\fR
(همهٔ) کامیتهای fixup تولیدشده به کار خواهد رفت\&.
.RE
.PP
\-\-gen\-completions
.RS 4
تولید تکمیل خودکار برای پوسته [مقادیر ممکن: bash, fish, nushell, zsh, powershell, elvish]
.RE
.PP
\-\-
.RS 4
گزینههایی که پس از تولید کامیتها به git rebase ارسال میشوند\&. باید آخرین آرگومانها باشند و علامت
\-\-
الزاماً باید وجود داشته باشد\&. تنها زمانی معتبر است که
\-\-and\-rebase
استفاده شده باشد\&.
.RE
.SH "نحوه استفاده (USAGE)"
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 1." 4.2
.\}
تغییراتی را که میخواهید جذب شوند با
.B git add
اضافه کنید\&. بر اساس طراحی، دستور
.B git absorb
تنها محتوای موجود در نمایه (index) گیت را در نظر میگیرد\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 2." 4.2
.\}
دستور
.B git absorb
را اجرا کنید\&. این کار توالیای از کامیتها را روی
HEAD
ایجاد میکند\&. هر کامیت دارای یک پیام
.B fixup!
خواهد بود که نشاندهندهٔ پیام (در صورت یکتا بودن) یا SHA کامیتی است که باید در آن ادغام (squash) شود\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 3." 4.2
.\}
اگر از خروجی رضایت دارید، دستور
.B git rebase \-i \-\-autosquash
را اجرا کنید تا کامیتهای
.B fixup!
در کامیتهای پیشین خود ادغام شوند\&. در صورتی که نیازی به ویرایش پروندهٔ TODO مربوط به rebase ندارید، میتوانید متغیر محیطی
.B GIT_SEQUENCE_EDITOR
را تنظیم کنید\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 4." 4.2
.\}
اگر راضی نیستید (یا اگر اتفاق نامطلوبی رخ داده است)، با دستور
.B git reset \-\-soft PRE_ABSORB_HEAD
به کامیت پیش از جذب بازگردید تا وضعیت پیشین خود را بازیابی کنید\&. (همچنین میتوانید کامیت مورد نظر را با دستور
.B git reflog
پیدا کنید\&.) و اگر فکر میکنید
.B git absorb
دچار خطا شده است، لطفاً یک گزارش اشکال (issue) ثبت کنید\&.
.RE
.SH "پیکربندی (CONFIGURATION)"
.SS "اندازه پشته (STACK SIZE)"
.sp
هنگامی که بدون \-\-base اجرا شود، git\-absorb کامیتهای کاندید برای fixup را تنها درون یک محدودهٔ معین (بهطور پیشفرض ۱۰) جستجو میکند\&. اگر با خطایی مشابه زیر روبرو شدید:
.sp
.if n \{\
.RS 4
.\}
.nf
WARN stack limit reached, limit: 10
.fi
.if n \{\
.RE
.\}
.sp
پروندهٔ \&.gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه نمایید:
.sp
.if n \{\
.RS 4
.\}
.nf
[absorb]
maxStack=50 # Or any other reasonable value for your project
.fi
.if n \{\
.RE
.\}
.sp
اندازهٔ پشته همچنین میتواند بهطور موقت برای یک دستور غیرفعال شود (به \-\-no\-limit مراجعه کنید)\&.
.SS "یک FIXUP به ازای هر کامیت قابل اصلاح (ONE FIXUP PER FIXABLE COMMIT)"
.sp
بهطور پیشفرض، git\-absorb برای هر تکه کد (hunk) قابل جذب، کامیتهای fixup جداگانهای تولید میکند\&. برای اینکه همیشه تنها ۱ کامیت fixup برای تمام تکههایی که در یک کامیت یکسان جذب میشوند تولید شود، پروندهٔ \&.gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:
.sp
.if n \{\
.RS 4
.\}
.nf
[absorb]
oneFixupPerCommit = true
.fi
.if n \{\
.RE
.\}
.SS "مرحلهبندی خودکار تمام تغییرات در صورت عدم وجود تغییرات در نمایه (AUTO\-STAGE ALL CHANGES IF NOTHING STAGED)"
.sp
بهطور پیشفرض، git\-absorb تنها پروندههایی را در نظر میگیرد که آنها را با git add در نمایه (index) مرحلهبندی کرده باشید\&. با این حال، گاهی فرد میخواهد عملیات جذب را روی تمامی تغییرات انجام دهد، که نیازمند مرحلهبندی اولیهٔ آنها با دستور git add \&.\& است\&. برای اجتناب از این مرحلهٔ اضافی، مقدار زیر را تنظیم کنید:
.sp
.if n \{\
.RS 4
.\}
.nf
[absorb]
autoStageIfNothingStaged = true
.fi
.if n \{\
.RE
.\}
.sp
این تنظیم به git\-absorb اعلام میکند که در صورت عدم وجود تغییرات مرحلهبندیشده، همهٔ تغییرات را بهطور خودکار مرحلهبندی کرده، در صورت امکان کامیتهای fixup بسازد و مابقی تغییرات را از حالت مرحلهبندی خارج (unstage) کند\&.
.SS "هدف FIXUP همیشه هش SHA باشد (FIXUP TARGET ALWAYS SHA)"
.sp
بهطور پیشفرض، git\-absorb کامیتهای fixup را طوری میسازد که پیام آنها به خلاصهٔ پیام کامیت مقصد اشاره داشته باشد و در صورت وجود پیامهای تکراری، به SHA کامیت مقصد متوسل میشود\&. در عوض، میتوانید مشخص کنید که همیشه به SHA کامیت مقصد اشاره کند از طریق:
.sp
.if n \{\
.RS 4
.\}
.nf
[absorb]
fixupTargetAlwaysSHA = true
.fi
.if n \{\
.RE
.\}
.SS "تولید FIXUP برای کامیتهای نوشتهشده توسط دیگران (GENERATE FIXUPS FOR COMMITS NOT AUTHORED BY YOU)"
.sp
بهطور پیشفرض، git\-absorb تنها برای کامیتهایی که توسط خود شما ثبت شدهاند کامیت fixup تولید میکند\&. برای تولید همیشگی fixup برای کامیتهای هر نویسندهای، پروندهٔ \&.gitconfig محلی یا سراسری خود را ویرایش نموده و بخش زیر را اضافه کنید:
.sp
.if n \{\
.RS 4
.\}
.nf
[absorb]
forceAuthor = true
.fi
.if n \{\
.RE
.\}
.SS "تولید FIXUP در وضعیت HEAD جداشده (GENERATE FIXUPS ON DETACHED HEAD)"
.sp
بهطور پیشفرض، زمانی که HEAD روی یک شاخه نیست (وضعیت «جداشده» یا detached)، دستور git\-absorb اقدام به ساخت کامیتهای fixup نمیکند\&. برای تولید همیشگی fixup در وضعیت HEAD جداشده، پروندهٔ \&.gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:
.sp
.if n \{\
.RS 4
.\}
.nf
[absorb]
forceDetach = true
.fi
.if n \{\
.RE
.\}
.SS "تولید کامیتهای SQUASH به جای FIXUP (GENERATE SQUASH COMMITS INSTEAD OF FIXUPS)"
.sp
بهطور پیشفرض، git\-absorb کامیتهای fixup ایجاد میکند\&. برای ایجاد کامیتهای squash به جای آن، پروندهٔ \&.gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:
.sp
.if n \{\
.RS 4
.\}
.nf
[absorb]
createSquashCommits = true
.fi
.if n \{\
.RE
.\}
.sp
هنگامی که این گزینه فعال باشد، عبارت «کامیت fixup» در سرتاسر مستندات میتواند به عنوان «کامیت squash» تلقی شود\&. تمام پیکربندیهای مربوط به کامیتهای fixup در این حالت برای کامیتهای squash اعمال خواهد شد\&.
.SH "پروژه گیتهاب (GITHUB PROJECT)"
.sp
https://github.com/tummychow/git\-absorb
.SH "نویسنده (AUTHOR)"
.sp
Stephen Jung
.SH "همچنین ببینید (SEE ALSO)"
.BR git (1),
.BR git\-rebase (1),
.BR git\-commit (1)