Amend — اصلاح آخرین کامیت
اصلاح پیام یا محتوای آخرین کامیت با git commit --amend — بدون ساخت کامیت جدید.
Amend چیست؟
فقط کامیت کردید و متوجه شدید: غلط املایی در پیام دارید! یا یک فایل را جا انداختید! بهجای کامیت اصلاحی جدید، git commit --amend آخرین کامیت را ویرایش میکند — انگار از اول درست بوده.
اصلاح پیام کامیت
git commit --amend -m "پیام اصلاحشده درست"
آخرین کامیت با پیام جدید جایگزین میشود (شناسهاش عوض میشود).
افزودن فایل جاافتاده
# فایل جاافتاده را stage کنید:
git add forgotten-file.txt
# و به آخرین کامیت اضافه کنید:
git commit --amend --no-edit
سوئیچ --no-edit یعنی پیام قبلی دستنخورده بماند.
همزمان: فایل + پیام
git add forgotten-file.txt
git commit --amend -m "پیام جدید + فایل جدید"
amend چه میکند؟ (فنی)
amend کامیت قبلی را حذف نمیکند — یک کامیت جدید با محتوای اصلاحشده میسازد و شاخه را به آن میبرد:
قبل: A---B (HEAD)
بعد: A---B" (HEAD) ← B جدید است؛ B قدیمی یتیم میشود (اما با reflog پیدا میشود)
⚠️ amend بعد از push — خطرناک!
اگر کامیت را push کردهاید و بعد amend کنید، تاریخچه محلی و ریموت متفاوت میشوند. push عادی خطا میدهد و مجبور به
push --force میشوید — که اگر همکارتان در این بین pull کرده باشد، کدش خراب میشود!قانون: amend فقط برای کامیتهای push نشده!
اگر مجبورید کامیت push شده را اصلاح کنید (مثلاً در شاخه شخصیتان):
git commit --amend
git push --force-with-lease
amend در عمل: سناریوی کامل
# کامیت اولیه:
git add .
git commit -m "افزودن صفحه پروفایل"
# اوه! فایل css جا افتاده:
git add style/profile.css
git commit --amend --no-edit
# و غلط املایی هم در پیام بود:
git commit --amend -m "افزودن صفحه پروفایل کاربر"
# حالا یک کامیت تمیز داریم:
git log --oneline -1
# e5f6g7h (HEAD -> main) افزودن صفحه پروفایل کاربر
amend با reset --soft چه فرقی دارد؟
| ویژگی | amend | reset --soft HEAD~1 |
|---|---|---|
| کار | ویرایش آخرین کامیت | بازکردن آخرین کامیت |
| مرحلهها | یک دستور | دو مرحله (reset + commit مجدد) |
| برای چند کامیت آخر | ❌ فقط یکی | با HEAD~n چندتا ✅ |
برای فقط آخرین کامیت، amend سادهتر است.
خلاصه
git commit --amendآخرین کامیت را ویرایش میکند-m "..."پیام جدید؛--no-editحفظ پیام- فایل جاافتاده: اول add بعد amend
- فقط برای کامیتهای push نشده!
این مبحث بخشی از دوره آموزش کامل Git است.