گزینهٔ
--amend آخرین کامیت رو با یک نسخهٔ درستشده جایگزین میکنه. فرض کنید کامیت «add login pgae» رو با غلط تایپی ساختین و فایل settings.py هم توش نرفته:
git add settings.py
git commit --amend -m "add login page"
git log --oneline
خروجی:
[main 5600caf] add login page
Date: Mon Oct 26 10:00:00 2026 +0330
2 files changed, 2 insertions(+)
create mode 100644 login.py
create mode 100644 settings.py
5600caf add login page
513b5b1 initial commit
حالا بهجای دو کامیت، فقط یک کامیت تمیز با پیام درست داریم که هر دو فایل رو داره.
اگه پیام درسته و فقط یک تغییر کوچیک جا مونده، با
--no-edit همون پیام قبلی میمونه و ادیتور هم باز نمیشه:
git add login.py
git commit --amend --no-edit
خروجی:
[main a72abbd] add login page
Date: Mon Oct 26 10:00:00 2026 +0330
2 files changed, 3 insertions(+)
create mode 100644 login.py
create mode 100644 settings.py
💎هش کامیت عوض میشه
گیت کامیت قبلی رو ویرایش نمیکنه؛ یک کامیت تازه میسازه و برنچ رو میبره روی اون. برای همین توی این مثال هش اول 5600caf شد و بعد a72abbd. کامیتهای قبلی هم هنوز توی
reflog پیدا میشن:
git reflog -3
خروجی:
a72abbd HEAD@{0}: commit (amend): add login page
5600caf HEAD@{1}: commit (amend): add login page
0984448 HEAD@{2}: commit: add login pgae
بعد از amend، تاریخچهٔ شما با سرور فرق میکنه و push معمولی رد میشه:
! [rejected] main -> main (non-fast-forward)
فقط روی برنچ شخصی خودتون و با این دستور push کنید. اگه برنچ روی سرور با آخرین چیزی که شما ازش دیدین فرق کرده باشه (مثلاً همتیمیتون چیز جدیدی فرستاده)، گیت push رو رد میکنه و کار اون پاک نمیشه:
git push --force-with-lease
▫️ روی برنچ مشترک مثل main، کامیتی رو که بقیه گرفتن amend نکنید؛ بهتره یک کامیت اصلاحی جدید بسازید.
▫️ گزینهٔ
--amend فقط آخرین کامیت رو عوض میکنه؛ برای کامیتهای قدیمیتر باید سراغ rebase تعاملی برید.▫️ اگه
-m رو ننویسید، ادیتور با پیام قبلی باز میشه تا همونجا ویرایشش کنید.
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
