'\" 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)