Git Amend | دستور گیت آمند
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
git commit --amend
دستوری در گیت که آخرین کامیت ثبتشده در شاخه فعلی را اصلاح کرده و آن را با یک کامیت کاملاً جدید که شامل تغییرات استیجشده جدید یا پیام بهروزرسانیشده است، جایگزین میکند.
--no-edit
فلگی در دستور اصلاح کامیت که اجازه میدهد فایلها یا تغییرات جدید به آخرین کامیت اضافه شوند، بدون آنکه ویرایشگر متن برای تغییر پیام کامیت باز شود.
--reset-author
گزینهای که متادیتای نویسنده (Author) آخرین کامیت را با اطلاعات پیکربندیشده فعلی کاربر در گیت بازنشانی و همگامسازی میکند.
- Commit SHA Mutation
تغییر مقدار هش یکتای کامیت به دلیل تغییر در محتوا، پیام یا متادیتا؛ دستور اصلاح کامیت ذاتاً یک کامیت جدید با شناسه متفاوت میسازد و کامیت قبلی را بازنویسی میکند.
موارد مصاحبه ای
- عملکرد دقیق دستور
git commit --amendزیر ذرهبین گیت چیست؟
این دستور کامیت قبلی را در جای خود ویرایش نمیکند، بلکه یک شیء کامیت کاملاً جدید با تغییرات اضافه یا پیام اصلاحشده میسازد و اشارهگر شاخه فعلی را به سمت کامیت جدید هدایت میکند، در نتیجه شناسه هش کامیت تغییر مییابد.
- چرا استفاده از amend روی کامیتهایی که به ریموت ارسال شدهاند خطرناک است؟
به دلیل تغییر هش کامیت پس از اصلاح، تاریخچه محلی با تاریخچه ریموت همگرا نخواهد بود و ارسال آن به مخزن اشتراکی نیازمند دستور اجباری است که تاریخچه همکاران را تخریب کرده و باعث ایجاد تعارضهای جدی در تیم میشود.
- تفاوت اصلاح پیام کامیت با اصلاح محتوای کامیت از طریق amend چیست؟
اگر تغییری در ناحیه استیج نباشد، دستور فقط پیام کامیت قبلی را ویرایش میکند؛ اما اگر پیش از آن فایلی با دستور git add استیج شده باشد، محتوای آن نیز با محتوای کامیت قبلی ترکیب میشود.
سناریو کاربردی
- اصلاح پیام کامیت و اضافه کردن فایل فراموششده به آخرین کامیت
در سناریوی اول فقط پیام آخرین کامیت تغییر داده میشود:
git commit --amend -m "refactor(core): update order processing logic"
در سناریوی دوم فایلی فراموششده به آخرین کامیت اضافه میشود، بدون تغییر در پیام قبلی:
git add forgotten_file.java
git commit --amend --no-edit
مراحل کار:
۱. اضافه کردن فایل فراموششده به ناحیه استیج با دستور git add.
۲. اجرای دستور git commit --amend --no-edit برای ادغام محتوا با آخرین کامیت بدون باز شدن ادیتور متن.
۳. جایگزینی کامیت پیشین با کامیت جدید شامل هر دو تغییر.
بیشتر بدانید
- تغییر اطلاعات نویسنده با متغیرهای سیستمی
اگر کامیت اولیه با نام کاربری یا ایمیل اشتباهی ثبت شده باشد، پس از اصلاح متغیرهای پیکربندی گیت میتوانید با دستور زیر هویت نویسنده کامیت را به تنظیمات جدید بهروزرسانی کنید:
git commit --amend --reset-author --no-edit
- بررسی تغییر هش پس از انجام اصلاح
همیشه پس از اجرای دستور اصلاح، با اجرای دستور git log -1 هش جدید کامیت را بررسی کنید تا تفاوت آن با هش قبل از اصلاح تایید شود.
