| GIT-HISTORY(1) | دستورات عمومی کاربر | GIT-HISTORY(1) |
نام (NAME)
git-history - آزمایشی: بازنویسی تاریخچه
خلاصه دستور (SYNOPSIS)
git history fixup <commit> [--dry-run] [--update-refs=(branches|head)] [--reedit-message] [--empty=(drop|keep|abort)] git history reword <commit> [--dry-run] [--update-refs=(branches|head)] git history split <commit> [--dry-run] [--update-refs=(branches|head)] [--] [<pathspec>...]
توضیحات (DESCRIPTION)
بازنویسی تاریخچه با بازآرایی یا تغییر کامیتهای مشخص در تاریخچه.
این دستور آزمایشی است. رفتار آن ممکن است تغییر کند.
این دستور با git-rebase(1) مرتبط است از این جهت که هر دو دستور میتوانند برای بازنویسی تاریخچه استفاده شوند؛ با این حال چند تفاوت عمده وجود دارد:
بهطور کلی، git-history(1) هدف دارد رویکردی مشخصتر برای اصلاح تاریخچه کامیت شما ارائه دهد که استفاده از آن در مقایسه با git-rebase(1) بهطور کلی سادهتر است.
اگر میخواهید محدودهای از کامیتها را بر روی یک پایه متفاوت مجدداً اعمال کنید از git-rebase(1) استفاده کنید، یا اگر میخواهید محدودهای از کامیتها را همزمان ویرایش کنید از rebaseهای تعاملی بهره ببرید.
محدودیتها (LIMITATIONS)
این دستور (هنوز) با تاریخچههایی که شامل ادغام هستند کار نمیکند. باید در عوض از git-rebase(1) با پرچم --rebase-merges استفاده کنید.
علاوه بر این، این دستور از عملیاتی که میتوانند منجر به تعارض ادغام (merge conflict) شوند پشتیبانی نمیکند. این محدودیت از روی طراحی است، زیرا بازنویسیهای تاریخچه به عنوان عملیات دارای وضعیت در نظر گرفته نشدهاند. این محدودیت زمانی میتواند برداشته شود که گیت قابلیت تعارضهای تراز اول (first-class conflicts) را به دست آورد (اگر به دست آورد).
هنگام استفاده از fixup با --empty=drop، حذف کامیت ریشه هنوز پشتیبانی نمیشود.
دستورات (COMMANDS)
دستورات زیر برای بازنویسی تاریخچه به روشهای مختلف در دسترس هستند:
fixup <commit>
پیام کامیت و نویسندگی کامیت مقصد بهطور پیشفرض حفظ میشوند، مگر اینکه --reedit-message را مشخص کنید.
اگر اعمال تغییرات مرحلهبندیشده منجر به تعارض شود، دستور با یک خطا متوقف میشود. تمام شاخههایی که از نوادگان کامیت اصلی هستند بهروزرسانی میشوند تا به تاریخچه بازنویسیشده اشاره کنند.
reword <commit>
split <commit> [--] [<pathspec>...]
پیامهای کامیت مربوط به کامیتهای تفکیکشده با راهاندازی ویرایشگر پیکربندیشده درخواست میشوند. نویسندگی کامیت همانند کامیت اصلی خواهد بود.
در صورت ارسال، <pathspec> میتواند برای محدود کردن اینکه کدام تغییرات باید از کامیت اصلی تفکیک شوند استفاده شود. فایلهایی که با هیچیک از pathspecها مطابقت ندارند بخشی از کامیت اصلی باقی خواهند ماند. برای جزئیات بیشتر، مدخل pathspec در gitglossary(7) را ببینید.
انتخاب همه هانکها یا هیچکدام از آنها نامعتبر است، زیرا منجر به خالی شدن یکی از کامیتها خواهد شد.
گزینهها (OPTIONS)
--dry-run
--reedit-message
--empty=(drop|keep|abort)
با drop (پیشفرض)، کامیتهای خالی از تاریخچه بازنویسیشده حذف میشوند. نوادگان یک کامیت مقصد حذفشده مستقیماً روی والد مقصد بازپخش میشوند. توجه داشته باشید که حذف کامیت ریشه پشتیبانی نمیشود؛ بخش محدودیتها (LIMITATIONS) را ببینید.
با keep، کامیتهای خالی همانطور که هستند در تاریخچه بازنویسیشده حفظ میشوند.
با abort، اگر هر کامیتی خالی شود، دستور با خطا متوقف میشود.
--update-refs=(branches|head)
مثالها (EXAMPLES)
اصلاح یک کامیت (Fixup a commit)
$ git log --oneline --stat abc1234 (HEAD -> main) third third.txt | 1 + def5678 second second.txt | 1 + ghi9012 first first.txt | 1 + $ echo "change" >>unrelated.txt $ git add unrelated.txt $ git history fixup ghi9012 $ git log --oneline --stat jkl3456 (HEAD -> main) third third.txt | 1 + mno7890 second second.txt | 1 + pqr1234 first first.txt | 1 + unrelated.txt | 1 +
افزودن مرحلهبندیشده unrelated.txt در کامیت first ادغام شده است. تمام کامیتهای نواده بر روی تاریخچه بازنویسیشده بازپخش شدهاند.
تفکیک یک کامیت (Split a commit)
$ git log --stat --oneline 3f81232 (HEAD -> main) original bar | 1 + foo | 1 + 2 files changed, 2 insertions(+) $ git history split HEAD diff --git a/bar b/bar new file mode 100644 index 0000000..5716ca5 --- /dev/null +++ b/bar @@ -0,0 +1 @@ +bar (1/1) Stage addition [y,n,q,a,d,p,?]? y diff --git a/foo b/foo new file mode 100644 index 0000000..257cc56 --- /dev/null +++ b/foo @@ -0,0 +1 @@ +foo (1/1) Stage addition [y,n,q,a,d,p,?]? n $ git log --stat --oneline 7cebe64 (HEAD -> main) original foo | 1 + 1 file changed, 1 insertion(+) d1582f3 split-out commit bar | 1 + 1 file changed, 1 insertion(+)
همچنین ببینید (SEE ALSO)
git(1), git-rebase(1), git-update-ref(1), githooks(5), gitglossary(7)
گیت (GIT)
بخشی از مجموعه git(1)
| 2026-06-29 | Git 2.55.0 |