git commit –amend เป็นฟีเจอร์ที่ช่วยให้คุณสามารถแก้ไข Commit ล่าสุดได้โดยไม่ต้องสร้าง Commit ใหม่ วิธีนี้มีประโยชน์สำหรับแก้ไข Commit Message ที่พิมพ์ผิด เพิ่มไฟล์ที่ลืม หรือแก้ไข Code ที่มีข้อผิดพลาด โดยไม่ทำให้ Git History ไม่เป็นระเบิยบหรือมี Commit ไม่จำเป็น ในการพัฒนาบน VPS ของ ผู้ให้บริการโฮสติ้ง การใช้ –amend อย่างถูกต้องช่วยให้ Git History สะอาดและปลอดภัย
git commit –amend คืออะไร และใช้ทำไม
git commit –amend เป็นคำสั่งที่ช่วยให้คุณแก้ไข Commit ล่าสุดที่เพิ่งสร้างไป เมื่อคุณ Amend Commit สิ่งที่เกิดขึ้นคือ Git จะรวม Staging Area ปัจจุบันกับ Commit ล่าสุด และถามให้คุณแก้ไข Commit Message ถ้าต้องการ
ความแตกต่างระหว่าง –amend กับการ Reset แล้ว Commit ใหม่คือ –amend จะรักษา Commit Hash และประวัติไว้เหมือเดิม ส่วน Reset + Commit ใหม่จะสร้าง Commit Hash ใหม่ ทำให้ Git History มีความสลับสนมากขึ้น
ข้อดีของการใช้ git commit –amend
- รักษา Commit Hash เหมือเดิม ทำให้ Git History สะอาด
- แก้ไข Commit Message ที่พิมพ์ผิดได้อย่างง่าย
- เพิ่มไฟล์ที่ลืมในการ Commit
- แก้ไข Code ที่มีข้อผิดพลาดเล็กน้อยในการ Commit
- ไม่สร้าง Commit ไม่จำเป็นที่ทำให้ History ยุ่งเหมือ
- ประหยัด Commit จำนวนมากเมื่อทำการ Fix ขนาดเล็กน้อย
- ช่วยให้ Repository มีความเป็นระเบิยบ
- ลดการ Merge Conflicts ในทีม
ข้อควรระวังเมื่อใช้ git commit –amend
แม้ว่า –amend มีประโยชน์ แต่ต้องใช้อย่างระวัง โดยเฉพาะการ Push ไปยัง Remote Repository แล้ว
- ห้ามใช้ –amend บน Commit ที่ได้ Push ไปยัง Remote แล้ว (เว้นแต่ต้องใช้ –force-with-lease)
- ใช้ –amend เฉพาะกับ Commit ล่าสุด (HEAD) เท่านั้น ไม่สามารถแก้ไข Commit เก่าๆ ได้
- หลีกเลี่ยง –amend บน Shared Branch เพราะอาจทำให้ทีมอื่นมีปัญหา
- ใช้ –force-with-lease หากต้อง Push หลังจาก Amend (ปลอดภัยกว่า –force)
- ตรวจสอบให้แน่นอนว่า Staging Area มีแต่ละสิ้งที่ต้องการแก้ไขเท่านั้น
วิธีการใช้ git commit –amend พื้นฐาน
การใช้ –amend นั้นง่ายมาก มีหลายวิธีขึ้นอยู่กับสิ่งที่ต้องการแก้ไข
# แก้ไข Commit Message เท่านั้น
git commit --amend
# แก้ไข Commit Message โดยไม่เปิด Editor
git commit --amend -m "New commit message"
# เพิ่มไฟล์ที่ลืม โดยไม่แก้ไข Message
git add forgotten_file.js
git commit --amend --no-edit
# เปลี่ยนแปง Code หลายไฟล์แล้ว Amend
git add modified_file1.js modified_file2.js
git commit --amend --no-edit
# เปลี่ยน Author ของ Commit
git commit --amend --author="John Doe "
# แก้ไข Commit Date
git commit --amend --date="Wed Feb 26 15:30:00 2026 +0700"
ตัวอย่างกรณีการใช้งาน git commit –amend
นี่คือตัวอย่างสถานการที่เราใช้ –amend บ่อยๆ
กรณี 1: พิมพ์ Commit Message ผิด
# สมมุว่าคุณเพิ่ง Commit แล้ว แต่ Message ผิด
git log --oneline -1
# หรือ fix: user login bug (ผิด ต้อง "fix" ไม่ใช่ "หรือ")
# แก้ไขโดยใช้ --amend
git commit --amend -m "fix: user login bug"
# Verify
git log --oneline -1
# fix: user login bug
กรณี 2: ลืมเพิ่มไฟล์ในการ Commit
# สมมุว่าคุณ Commit แล้ว แต่ลืมเพิ่มไฟล์ config.json
git log --oneline -1
# Add user authentication feature
# เพิ่มไฟล์ที่ลืม
git add config.json
# Amend Commit โดยไม่เปลี่ยน Message
git commit --amend --no-edit
# Verify
git log --oneline -1
# ตรวจสอบว่า config.json ถูกเพิ่มเข้าไป
git show --name-only
กรณี 3: แก้ไข Code ที่มีข้อผิดพลาดเล็กน้อย
# สมมุว่า Code มี Typo เล็กน้อย
git add app.js
git commit --amend --no-edit
# Push โดยใช้ --force-with-lease (ปลอดภัยกว่า)
git push origin feature-branch --force-with-lease
การแก้ไข Commit เก่าๆ (ไม่ใช่ HEAD) ด้วย Rebase
–amend ทำงานได้เฉพาะกับ Commit ล่าสุด (HEAD) เท่านั้น หากต้องแก้ไข Commit เก่าๆ คุณต้องใช้ git rebase -i
# สมมุว่าที่ต้องแก้ไข 3 Commit ล่าสุด
git rebase -i HEAD~3
# จะเปิด Editor ใหเลือกว่า Commit ไหนจะ Edit
# เปลี่ยน "pick" เป็น "edit" สำหรับ Commit ที่ต้องแก้ไข
git rebase --continue
Amend บน Pushed Commits – วิธีปลอดภัย
หากคุณได้ Amend Commit ที่ Push ไปยังแล้ว คุณต้อง Push ใหม่โดยใช้ –force-with-lease (ปลอดภัยกว่า –force)
# สมมุว่าคุณ Amend Commit ล่าสุด
git add .
git commit --amend -m "Updated message"
# Push โดยใช้ --force-with-lease (ปลอดภัยกว่า --force)
git push origin your-branch --force-with-lease
# ห้ามใช้ --force โยง --force-with-lease ป้องกัน Force Push ตัวบ้า
git config --global alias.psf 'push --force-with-lease'
ความแตกต่างระหว่าง –force กับ –force-with-lease คือ –force-with-lease จะตรวจสอบว่า Remote มี Changes ใหม่หรือไม่ ถ้ามี จะไม่ให้ Push ตัวสลด ส่วน –force จะ Override ทุกอย่างโดยไม่มีการตรวจสอบ
Tips สำหรับการใช้ git commit –amend อย่างปลอดภัย
- ตรวจสอบ Staging Area ด้วย “git status” ก่อนใช้ –amend
- ดู Commit ล่าสุดด้วย “git log –oneline -1” เพื่อให้แน่นว่า Amend ครบลุกณ์
- ใช้ –no-edit เมื่อต้องการให้ Message เหมือเดิม
- ใช้ –force-with-lease แทน –force เมื่อ Push
- บอกทีมหรือ Pull Request Reviewer ก่อนทำ Amend บน Shared Branch
- หลีกเลี่ยง Amend บน Main, Master หรือ Production Branch
- ใช้ git reflog หากทำผิดพลาดและต้องการกู้คืน Commit เก่า
- สร้าง Alias เพื่อให้ใช้ –amend เร็วขึ้น เช่น “git config –global alias.am ‘commit –amend'”
# 1. ตรวจสอบว่า Commit ยังไม่ได้ Push
git status
git log --oneline -3
# 2. แก้ไขไฟล์ที่ต้องการ
vim file.js
# 3. Add และ Amend
git add file.js
git commit --amend --no-edit
# 4. ตรวจสอบ Amend ว่าถูกต้องหรือไม่
git show
git diff HEAD~1 HEAD
# 5. ถ้า Push ไปยังแล้วและต้อง Amend ใหม่
git push origin branch-name --force-with-lease
# 6. ตรวจสอบบน Remote
git log origin/branch-name --oneline -3
การกู้คืนหลังจาก Amend ด้วย git reflog
หากคุณ Amend ผิดและต้องการกู้คืน Commit เก่า คุณสามารถใช้ git reflog
# ดูประวัติของ HEAD
git reflog
# ผลลัพธ์ประมาณว่า
git reflog
# a1b2c3d HEAD@{0}: commit (amend): New message
# x9y8z7w HEAD@{1}: commit: Old message
# ...
# กลับไปยัง Commit เก่า
git reset --hard HEAD@{1}
# หรือใช้ Commit Hash
git reset --hard x9y8z7w
Alias เพื่อให้ใช้ –amend เร็วขึ้น
# สร้าง Alias สำหรับการ Amend
git config --global alias.am 'commit --amend'
git config --global alias.ame 'commit --amend --no-edit'
git config --global alias.amp 'commit --amend && git push --force-with-lease'
# ตอนนี้คุณสามารถใช้
git am -m "New message"
git ame # Amend โดยไม่แก้ Message
git amp # Amend แล้ว Push
Amend หลายไฟล์พร้อมกัน
# สมมุว่ามีหลายไฟล์ทีต้องแก้ไข
git add file1.js file2.js file3.js
# Amend โดยไม่เปลี่ยน Message
git commit --amend --no-edit
# หรือแก้ไข Message ด้วย
git commit --amend -m "Fix: multiple bugs in modules"
# Verify ว่าไฟล์ทั้งหมดถูกเพิ่ม
git show --name-status
สรุป
git commit –amend เป็นเครื่องมือที่มีประสิทธิภาพและปลอดภัยสำหรับแก้ไข Commit ล่าสุด ช่วยให้ Git History สะอาดและเป็นระเบิยบ เมื่อทำการตรวจสอบก่อนใช้งาน โดยเฉพาะการ Push ไปยัง Remote Repository แล้ว และใช้ –force-with-lease เมื่อต้องการ ผู้พัฒนาบน VPS ของ ผู้ให้บริการโฮสติ้ง จะได้ Repository ที่สะอาดและการทำงานเป็นทีมมีประสิทธิภาพสูง
