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 در صورت موفقیت‌آمیز بودن، 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 نمایش خروجی با جزئیات بیشتر. گزینه‌ها (OPTIONS) -b , --base استفاده از این کامیت به عنوان پایهٔ پشتهٔ جذب (absorb stack). -m , --message یک متن ساده برای بدنهٔ پیام کامیت که برای all (همهٔ) کامیت‌های fixup تولیدشده به کار خواهد رفت. --gen-completions تولید تکمیل خودکار برای پوسته [مقادیر ممکن: bash, fish, nushell, zsh, powershell, elvish] -- گزینه‌هایی که پس از تولید کامیت‌ها به git rebase ارسال می‌شوند. باید آخرین آرگومان‌ها باشند و علامت -- الزاماً باید وجود داشته باشد. تنها زمانی معتبر است که --and-rebase استفاده شده باشد. نحوه استفاده (USAGE) 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) ثبت کنید. پیکربندی (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) https://github.com/tummychow/git-absorb نویسنده (AUTHOR) Stephen Jung همچنین ببینید (SEE ALSO) git(1), git-rebase(1), git-commit(1) git-absorb 03/27/2026 GIT-ABSORB(1)