| GIT-ABSORB(1) | git absorb | GIT-ABSORB(1) |
نام (NAME)
git-absorb - ادغام خودکار تغییرات در کامیتهای قبلی متناظر
خلاصه دستور (SYNOPSIS)
git absorb [FLAGS] [OPTIONS]
توضیحات (DESCRIPTION)
شما یک شاخهٔ ویژگی با چند کامیت دارید. همتیمی شما شاخه را بررسی کرده و چند باگ را مشخص کرده است. شما اصلاحاتی برای این باگها دارید، اما نمیخواهید همهٔ آنها را در یک کامیت مبهم با پیام «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 در گیت، کامیتهای اصلاحی را در شاخهٔ ویژگی خود ادغام نمایید.
فلگها (FLAGS)
-r, --and-rebase
-n, --dry-run
--no-limit
این گزینه تمام کامیتها را تا رسیدن به کامیت ریشه (root)، کامیت ادغام (merge) یا کامیتی از نویسندهای دیگر (مگر اینکه از --force-author استفاده شود) در نظر میگیرد.
به همین دلیل هنگام استفاده از این پرچم باید احتیاط کنید.
--force-author
--force-detach
-F, --one-fixup-per-commit
-f, --force
-s, --squash
هنگامی که این پرچم استفاده میشود، در سراسر این مستندات عبارت «کامیت fixup» میتواند به صورت «کامیت squash» خوانده شود. تمام تنظیمات مربوط به کامیتهای fixup در این حالت برای کامیتهای squash اعمال خواهد شد.
-w, --whole-file
-h, --help
-V, --version
-v, --verbose
گزینهها (OPTIONS)
-b <base>, --base <base>
-m <MESSAGE>, --message <MESSAGE>
--gen-completions <SHELL>
-- <REBASE_OPTIONS>
نحوه استفاده (USAGE)
پیکربندی (CONFIGURATION)
اندازه پشته (STACK SIZE)
هنگامی که بدون --base اجرا شود، git-absorb کامیتهای کاندید برای fixup را تنها درون یک محدودهٔ معین (بهطور پیشفرض ۱۰) جستجو میکند. اگر با خطایی مشابه زیر روبرو شدید:
WARN stack limit reached, limit: 10
پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه نمایید:
[absorb]
maxStack=50 # Or any other reasonable value for your project
اندازهٔ پشته همچنین میتواند بهطور موقت برای یک دستور غیرفعال شود (به --no-limit مراجعه کنید).
یک FIXUP به ازای هر کامیت قابل اصلاح (ONE FIXUP PER FIXABLE COMMIT)
بهطور پیشفرض، git-absorb برای هر تکه کد (hunk) قابل جذب، کامیتهای fixup جداگانهای تولید میکند. برای اینکه همیشه تنها ۱ کامیت fixup برای تمام تکههایی که در یک کامیت یکسان جذب میشوند تولید شود، پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:
[absorb]
oneFixupPerCommit = true
مرحلهبندی خودکار تمام تغییرات در صورت عدم وجود تغییرات در نمایه (AUTO-STAGE ALL CHANGES IF NOTHING STAGED)
بهطور پیشفرض، git-absorb تنها پروندههایی را در نظر میگیرد که آنها را با git add در نمایه (index) مرحلهبندی کرده باشید. با این حال، گاهی فرد میخواهد عملیات جذب را روی تمامی تغییرات انجام دهد، که نیازمند مرحلهبندی اولیهٔ آنها با دستور git add . است. برای اجتناب از این مرحلهٔ اضافی، مقدار زیر را تنظیم کنید:
[absorb]
autoStageIfNothingStaged = true
این تنظیم به git-absorb اعلام میکند که در صورت عدم وجود تغییرات مرحلهبندیشده، همهٔ تغییرات را بهطور خودکار مرحلهبندی کرده، در صورت امکان کامیتهای fixup بسازد و مابقی تغییرات را از حالت مرحلهبندی خارج (unstage) کند.
هدف FIXUP همیشه هش SHA باشد (FIXUP TARGET ALWAYS SHA)
بهطور پیشفرض، git-absorb کامیتهای fixup را طوری میسازد که پیام آنها به خلاصهٔ پیام کامیت مقصد اشاره داشته باشد و در صورت وجود پیامهای تکراری، به SHA کامیت مقصد متوسل میشود. در عوض، میتوانید مشخص کنید که همیشه به SHA کامیت مقصد اشاره کند از طریق:
[absorb]
fixupTargetAlwaysSHA = true
تولید FIXUP برای کامیتهای نوشتهشده توسط دیگران (GENERATE FIXUPS FOR COMMITS NOT AUTHORED BY YOU)
بهطور پیشفرض، git-absorb تنها برای کامیتهایی که توسط خود شما ثبت شدهاند کامیت fixup تولید میکند. برای تولید همیشگی fixup برای کامیتهای هر نویسندهای، پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش نموده و بخش زیر را اضافه کنید:
[absorb]
forceAuthor = true
تولید FIXUP در وضعیت HEAD جداشده (GENERATE FIXUPS ON DETACHED HEAD)
بهطور پیشفرض، زمانی که HEAD روی یک شاخه نیست (وضعیت «جداشده» یا detached)، دستور git-absorb اقدام به ساخت کامیتهای fixup نمیکند. برای تولید همیشگی fixup در وضعیت HEAD جداشده، پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:
[absorb]
forceDetach = true
تولید کامیتهای SQUASH به جای FIXUP (GENERATE SQUASH COMMITS INSTEAD OF FIXUPS)
بهطور پیشفرض، git-absorb کامیتهای fixup ایجاد میکند. برای ایجاد کامیتهای squash به جای آن، پروندهٔ .gitconfig محلی یا سراسری خود را ویرایش کرده و بخش زیر را اضافه کنید:
[absorb]
createSquashCommits = true
هنگامی که این گزینه فعال باشد، عبارت «کامیت fixup» در سرتاسر مستندات میتواند به عنوان «کامیت squash» تلقی شود. تمام پیکربندیهای مربوط به کامیتهای fixup در این حالت برای کامیتهای squash اعمال خواهد شد.
پروژه گیتهاب (GITHUB PROJECT)
نویسنده (AUTHOR)
Stephen Jung <tummychow511@gmail.com>
همچنین ببینید (SEE ALSO)
| 03/27/2026 | git-absorb |