กลับไปหน้าบทความ
#Git#restore#reset#revert#version-control

เข้าใจการ Undo ใน Git: ใช้ restore, reset, revert ให้ถูกสถานการณ์

การย้อนการเปลี่ยนแปลงใน Git ไม่ได้มีคำสั่งเดียวที่ใช้ได้ทุกกรณี เพราะ `restore`, `reset` และ `revert` ถูกออกแบบมาคนละสถานการณ์ การเข้าใจความต่างของแต่ละคำสั่งจะช่วยให้แก้งานพลาดได้อย่างมั่นใจและปลอดภัยขึ้น

20 มิถุนายน 2569อ่านประมาณ 2 นาที

แชร์บทความ

เข้าใจการ Undo ใน Git: ใช้ restore, reset, revert ให้ถูกสถานการณ์

เข้าใจการ Undo ใน Git: ใช้ restore, reset, revert ให้ถูกสถานการณ์

การ Undo ใน Git เป็นพื้นฐานสำคัญที่ควรรู้ตั้งแต่เริ่มต้น เพราะแม้หลายคำสั่งจะดูเหมือนใช้เพื่อ “ย้อนกลับ” เหมือนกัน แต่ในความเป็นจริงแต่ละคำสั่งมีหน้าที่ต่างกัน และเหมาะกับคนละบริบท

คำสั่งที่มักถูกพูดถึงบ่อยคือ git restore, git reset และ git revert ซึ่งความแตกต่างหลักอยู่ที่ว่าเราต้องการย้อนเฉพาะไฟล์ ย้อนประวัติ commit หรือสร้าง commit ใหม่เพื่อหักล้างการเปลี่ยนแปลงเดิม

หากเลือกใช้ถูกสถานการณ์ Git จะไม่ใช่เรื่องน่ากลัว แต่จะกลายเป็นเครื่องมือที่ช่วยให้เราทำงานได้อย่างมั่นใจมากขึ้น

ทำความเข้าใจความต่างของ restore, reset และ revert

git restore

git restore เหมาะกับกรณีที่เรายังไม่ได้ commit และต้องการย้อนไฟล์ใน working tree ให้กลับไปเป็นสถานะก่อนหน้า คำสั่งนี้มักเป็นตัวเลือกแรกเมื่อแก้ไฟล์ผิดแล้วอยากกลับไปเริ่มใหม่แบบเฉพาะจุด

จุดเด่นคือใช้งานตรงวัตถุประสงค์และปลอดภัยกว่าการใช้คำสั่งที่กระทบ history ของโปรเจกต์

git reset

git reset ใช้เมื่อเราต้องการจัดการกับ commit ที่เกิดขึ้นไปแล้ว โดยเฉพาะในกรณีที่ commit นั้นยังอยู่ในเครื่องของเราเอง และยังไม่ได้แชร์ให้คนอื่นใช้งานร่วมกัน

คำสั่งนี้สามารถย้ายตำแหน่ง history ได้ จึงทรงพลังมาก แต่ก็มีความเสี่ยงสูงเช่นกัน หากใช้กับ branch ที่มีการ push หรือแชร์กับทีมแล้ว อาจทำให้ประวัติการทำงานสับสนและกระทบคนอื่นได้

git revert

git revert เป็นทางเลือกที่ปลอดภัยกว่าสำหรับงานที่ถูกแชร์กับทีมแล้ว เพราะมันไม่ลบหรือแก้ history เดิม แต่จะสร้าง commit ใหม่ขึ้นมาเพื่อย้อนผลของ commit ที่ไม่ต้องการ

แนวคิดนี้เหมาะมากกับ branch ที่หลายคนใช้งานร่วมกัน เพราะช่วยคงลำดับประวัติไว้ครบถ้วนและตรวจสอบย้อนหลังได้ง่าย

เลือกคำสั่งให้ตรงกับสถานะของงาน

หนึ่งในวิธีคิดที่ช่วยได้มากคือถามตัวเองก่อนว่า งานนี้อยู่ตรงไหน

  • ถ้ายังเป็นการแก้ไฟล์ในเครื่องและยังไม่ได้ commit ให้คิดถึงคำสั่งระดับไฟล์ เช่น git restore
  • ถ้า commit ไปแล้ว แต่ยังเป็น commit ที่อยู่ในเครื่องเราเองและยังไม่ได้กระทบใคร อาจใช้ git reset
  • ถ้า commit นั้นถูก push หรือแชร์กับทีมไปแล้ว ควรใช้ git revert เพื่อไม่ให้ history ของคนอื่นพัง

ตัวอย่างสถานการณ์แบบง่ายมีดังนี้

  • แก้ไฟล์ผิดและยังไม่ commit → ใช้ restore
  • commit ผิดในเครื่องตัวเอง → อาจใช้ reset
  • commit ผิดบน branch ที่ทีมใช้งานร่วมกัน → ใช้ revert

การแยกสถานะของงานให้ออกก่อนสั่ง Undo จะช่วยลดโอกาสผิดพลาดได้มากกว่าการจำแค่ว่า “คำสั่งไหนใช้ย้อนกลับได้”

ข้อผิดพลาดที่พบบ่อยในการ Undo

ข้อผิดพลาดที่เจอบ่อยคือรีบใช้ reset --hard เร็วเกินไป ทั้งที่ยังมีงานค้างอยู่ในเครื่อง คำสั่งนี้อาจทำให้การเปลี่ยนแปลงที่ยังไม่ได้ commit หายไปได้ทันที

ปัญหาไม่ได้อยู่ที่คำสั่งนี้ไม่ดี แต่เกิดจากการใช้โดยไม่เข้าใจบริบทของสถานะงานตัวเองต่างหาก ยิ่งในช่วงที่กำลังรีบแก้ปัญหา หลายคนมักคัดลอกคำสั่งจากอินเทอร์เน็ตมาใช้โดยไม่ได้ตรวจสอบก่อนว่าเหมาะกับสถานการณ์จริงหรือไม่

สิ่งที่ควรทำก่อน Undo ทุกครั้ง

ก่อนจะ Undo ควรเริ่มจากการดูสถานะปัจจุบันของ repository ก่อนเสมอ โดยเฉพาะคำสั่งต่อไปนี้

  • git status เพื่อดูว่าไฟล์ไหนถูกแก้ มีไฟล์ไหน staged หรือยังไม่ได้ติดตาม
  • git diff เพื่อดูว่าการเปลี่ยนแปลงที่กำลังจะย้อนนั้นคืออะไร

สองคำสั่งนี้ช่วยให้เราเห็นภาพก่อนตัดสินใจ และลดความเสี่ยงจากการ Undo แบบไม่รู้ว่ากำลังย้อนอะไรอยู่

เทคนิคเพิ่มความปลอดภัยก่อนสั่งย้อนกลับ

หากไม่มั่นใจว่าคำสั่งที่จะใช้จะให้ผลลัพธ์ตามที่ต้องการหรือไม่ อีกเทคนิคที่มีประโยชน์มากคือสร้างจุดปลอดภัยไว้ก่อน เช่น

git branch backup-before-undo

branch ชั่วคราวลักษณะนี้ช่วยให้เรากลับมาที่จุดเดิมได้ง่าย หากลอง Undo แล้วผลลัพธ์ไม่เป็นอย่างที่คิด ถือเป็นวิธีง่าย ๆ ที่ช่วยลดความกังวล โดยเฉพาะเวลาต้องจัดการกับ commit หรือ history

การเข้าใจ Undo ทำให้ใช้ Git ได้มั่นใจขึ้น

การเรียนรู้เรื่อง Undo ไม่ได้มีไว้แค่แก้ความผิดพลาด แต่ยังช่วยให้เราใช้งาน Git อย่างเป็นระบบมากขึ้น เราจะเริ่มมองออกว่าปัญหาแต่ละแบบควรแก้ด้วยคำสั่งระดับไหน ระหว่างระดับไฟล์ ระดับ commit หรือระดับ history ที่แชร์ร่วมกัน

เมื่อเข้าใจหลักคิดนี้แล้ว การพลาดเล็ก ๆ ระหว่างทำงานจะไม่ใช่เรื่องน่ากลัวอีกต่อไป และไม่จำเป็นต้องแก้ปัญหาด้วยวิธี manual เช่นคัดลอกไฟล์เก็บไว้เองหรือเริ่มต้นใหม่ทั้งโปรเจกต์

สรุป

หัวใจของการ Undo ใน Git คือการเลือกคำสั่งให้ตรงกับสถานะของงาน

  • ยังไม่ commit และอยากย้อนเฉพาะไฟล์ → ใช้ git restore
  • commit แล้ว แต่ยังเป็นงานในเครื่องตัวเอง → ใช้ git reset อย่างระมัดระวัง
  • commit ถูกแชร์กับทีมแล้ว → ใช้ git revert เพื่อรักษา history

ก่อนสั่ง Undo ทุกครั้ง ควรตรวจสอบด้วย git status และ git diff และถ้าอยากปลอดภัยขึ้นอีกขั้น ให้สร้าง branch สำรองไว้ก่อน การเข้าใจแนวคิดนี้จะช่วยให้คุณใช้ Git ได้มั่นใจขึ้น และรับมือกับความผิดพลาดได้อย่างเป็นระบบ