GIT-ABSORB(1) git absorb GIT-ABSORB(1)

git-absorb - ادغام خودکار تغییرات در کامیت‌های قبلی متناظر

git absorb [FLAGS] [OPTIONS]

شما یک شاخهٔ ویژگی با چند کامیت دارید. هم‌تیمی شما شاخه را بررسی کرده و چند باگ را مشخص کرده است. شما اصلاحاتی برای این باگ‌ها دارید، اما نمی‌خواهید همهٔ آن‌ها را در یک کامیت مبهم با پیام «fixes» قرار دهید، زیرا به کامیت‌های اتمیک (atomic commits) باور دارید. به جای یافتن دستی هش‌های SHA کامیت‌ها برای git commit --fixup یا اجرای دستی یک rebase تعاملی، این کار را انجام دهید:

$ git add $FILES_YOU_FIXED
$ git absorb --and-rebase
  (or)
$ git absorb
$ git rebase -i --autosquash master

دستور git absorb به‌طور خودکار تشخیص می‌دهد که کدام کامیت‌ها برای تغییر ایمن هستند و کدام تغییرات نمایه‌بندی‌شده (indexed changes) به هر یک از آن کامیت‌ها تعلق دارند. سپس برای هر یک از آن تغییرات، کامیت‌های fixup! می‌نویسد. در صورتی که به آن اطمینان کامل ندارید، می‌توانید خروجی آن را به‌صورت دستی بررسی کنید و سپس با قابلیت درون‌ساخت autosquash در گیت، کامیت‌های اصلاحی را در شاخهٔ ویژگی خود ادغام نمایید.

-r, --and-rebase

در صورت موفقیت‌آمیز بودن، rebase را اجرا می‌کند. همچنین بخش REBASE_OPTIONS را در ادامه ببینید.

-n, --dry-run

هیچ تغییر واقعی اعمال نمی‌کند (اجرای آزمایشی).

--no-limit

محدودیت پشتهٔ جذب (absorb stack) را حذف می‌کند. در صورت استفاده همراه با --base بی‌اثر است.

این گزینه تمام کامیت‌ها را تا رسیدن به کامیت ریشه (root)، کامیت ادغام (merge) یا کامیتی از نویسنده‌ای دیگر (مگر اینکه از --force-author استفاده شود) در نظر می‌گیرد.

به همین دلیل هنگام استفاده از این پرچم باید احتیاط کنید.

--force-author

تولید fixup برای کامیت‌هایی که توسط شما ایجاد نشده‌اند.

--force-detach

تولید fixup حتی زمانی که HEAD روی یک شاخه نیست (وضعیت جداشده یا detached HEAD).

-F, --one-fixup-per-commit

تنها یک کامیت fixup به ازای هر کامیت تولید می‌کند.

-f, --force

تمام بررسی‌های ایمنی را نادیده می‌گیرد؛ گویی تمام پرچم‌های --force-* مشخص شده‌اند. برای درک اثر کامل استفاده از --force توضیحات آن پرچم‌ها را مطالعه کنید.

-s, --squash

به جای کامیت‌های fixup، کامیت‌های squash ایجاد می‌کند.

هنگامی که این پرچم استفاده می‌شود، در سراسر این مستندات عبارت «کامیت fixup» می‌تواند به صورت «کامیت squash» خوانده شود. تمام تنظیمات مربوط به کامیت‌های fixup در این حالت برای کامیت‌های squash اعمال خواهد شد.

-w, --whole-file

اولین کامیتی را که فایلی یکسان با تکه‌کد (hunk) جاری را تغییر داده است مطابقت می‌دهد. از این گزینه با احتیاط استفاده کنید!

-h, --help

اطلاعات راهنما را چاپ می‌کند.

-V, --version

اطلاعات نسخه را چاپ می‌کند.

-v, --verbose

نمایش خروجی با جزئیات بیشتر.

-b <base>, --base <base>

استفاده از این کامیت به عنوان پایهٔ پشتهٔ جذب (absorb stack).

-m <MESSAGE>, --message <MESSAGE>

یک متن ساده برای بدنهٔ پیام کامیت که برای all (همهٔ) کامیت‌های fixup تولیدشده به کار خواهد رفت.

--gen-completions <SHELL>

تولید تکمیل خودکار برای پوسته [مقادیر ممکن: bash, fish, nushell, zsh, powershell, elvish]

-- <REBASE_OPTIONS>

گزینه‌هایی که پس از تولید کامیت‌ها به git rebase ارسال می‌شوند. باید آخرین آرگومان‌ها باشند و علامت -- الزاماً باید وجود داشته باشد. تنها زمانی معتبر است که --and-rebase استفاده شده باشد.

1.تغییراتی را که می‌خواهید جذب شوند با git add اضافه کنید. بر اساس طراحی، دستور git absorb تنها محتوای موجود در نمایه (index) گیت را در نظر می‌گیرد.
2.دستور git absorb را اجرا کنید. این کار توالی‌ای از کامیت‌ها را روی HEAD ایجاد می‌کند. هر کامیت دارای یک پیام fixup! خواهد بود که نشان‌دهندهٔ پیام (در صورت یکتا بودن) یا SHA کامیتی است که باید در آن ادغام (squash) شود.
3.اگر از خروجی رضایت دارید، دستور git rebase -i --autosquash را اجرا کنید تا کامیت‌های fixup! در کامیت‌های پیشین خود ادغام شوند. در صورتی که نیازی به ویرایش پروندهٔ TODO مربوط به rebase ندارید، می‌توانید متغیر محیطی GIT_SEQUENCE_EDITOR را تنظیم کنید.
4.اگر راضی نیستید (یا اگر اتفاق نامطلوبی رخ داده است)، با دستور git reset --soft PRE_ABSORB_HEAD به کامیت پیش از جذب بازگردید تا وضعیت پیشین خود را بازیابی کنید. (همچنین می‌توانید کامیت مورد نظر را با دستور git reflog پیدا کنید.) و اگر فکر می‌کنید git absorb دچار خطا شده است، لطفاً یک گزارش اشکال (issue) ثبت کنید.

هنگامی که بدون --base اجرا شود، git-absorb کامیت‌های کاندید برای fixup را تنها درون یک محدودهٔ معین (به‌طور پیش‌فرض ۱۰) جستجو می‌کند. اگر با خطایی مشابه زیر روبرو شدید:

WARN stack limit reached, limit: 10

پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه نمایید:

[absorb]
    maxStack=50 # Or any other reasonable value for your project

اندازهٔ پشته همچنین می‌تواند به‌طور موقت برای یک دستور غیرفعال شود (به --no-limit مراجعه کنید).

به‌طور پیش‌فرض، git-absorb برای هر تکه کد (hunk) قابل جذب، کامیت‌های fixup جداگانه‌ای تولید می‌کند. برای اینکه همیشه تنها ۱ کامیت fixup برای تمام تکه‌هایی که در یک کامیت یکسان جذب می‌شوند تولید شود، پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:

[absorb]
    oneFixupPerCommit = true

به‌طور پیش‌فرض، git-absorb تنها پرونده‌هایی را در نظر می‌گیرد که آن‌ها را با git add در نمایه (index) مرحله‌بندی کرده باشید. با این حال، گاهی فرد می‌خواهد عملیات جذب را روی تمامی تغییرات انجام دهد، که نیازمند مرحله‌بندی اولیهٔ آن‌ها با دستور git add . است. برای اجتناب از این مرحلهٔ اضافی، مقدار زیر را تنظیم کنید:

[absorb]
    autoStageIfNothingStaged = true

این تنظیم به git-absorb اعلام می‌کند که در صورت عدم وجود تغییرات مرحله‌بندی‌شده، همهٔ تغییرات را به‌طور خودکار مرحله‌بندی کرده، در صورت امکان کامیت‌های fixup بسازد و مابقی تغییرات را از حالت مرحله‌بندی خارج (unstage) کند.

به‌طور پیش‌فرض، git-absorb کامیت‌های fixup را طوری می‌سازد که پیام آن‌ها به خلاصهٔ پیام کامیت مقصد اشاره داشته باشد و در صورت وجود پیام‌های تکراری، به SHA کامیت مقصد متوسل می‌شود. در عوض، می‌توانید مشخص کنید که همیشه به SHA کامیت مقصد اشاره کند از طریق:

[absorb]
    fixupTargetAlwaysSHA = true

به‌طور پیش‌فرض، git-absorb تنها برای کامیت‌هایی که توسط خود شما ثبت شده‌اند کامیت fixup تولید می‌کند. برای تولید همیشگی fixup برای کامیت‌های هر نویسنده‌ای، پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش نموده و بخش زیر را اضافه کنید:

[absorb]
    forceAuthor = true

به‌طور پیش‌فرض، زمانی که HEAD روی یک شاخه نیست (وضعیت «جداشده» یا detached)، دستور git-absorb اقدام به ساخت کامیت‌های fixup نمی‌کند. برای تولید همیشگی fixup در وضعیت HEAD جداشده، پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:

[absorb]
    forceDetach = true

به‌طور پیش‌فرض، git-absorb کامیت‌های fixup ایجاد می‌کند. برای ایجاد کامیت‌های squash به جای آن، پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:

[absorb]
    createSquashCommits = true

هنگامی که این گزینه فعال باشد، عبارت «کامیت fixup» در سرتاسر مستندات می‌تواند به عنوان «کامیت squash» تلقی شود. تمام پیکربندی‌های مربوط به کامیت‌های fixup در این حالت برای کامیت‌های squash اعمال خواهد شد.

https://github.com/tummychow/git-absorb

Stephen Jung <tummychow511@gmail.com>

git(1), git-rebase(1), git-commit(1)

03/27/2026 git-absorb