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 چه فرقی دارد؟

ویژگیamendreset --soft HEAD~1
کارویرایش آخرین کامیتبازکردن آخرین کامیت
مرحله‌هایک دستوردو مرحله (reset + commit مجدد)
برای چند کامیت آخر❌ فقط یکیبا HEAD~n چندتا ✅

برای فقط آخرین کامیت، amend ساده‌تر است.

خلاصه

این مبحث بخشی از دوره آموزش کامل Git است.

ابزارهای مرتبط