สวัสดี Dev ทุกคน! ใครเคยเจอปัญหาทำอะไรพลาดแล้วอยากย้อนกลับไปใช้ commit เก่าใน Git กันบ้าง? การดึง commit กลับมานั้นไม่ได้ยากอย่างที่คิด มีหลายวิธีที่เลือกใช้ได้ตามความต้องการ ลองมาดูกันเลยว่าแต่ละวิธีเหมาะกับสถานการณ์ไหนบ้าง
วิธีที่ 1: git checkout (แค่บางไฟล์ก็พอ)
ถ้าเราอยากได้ไฟล์หรือโฟลเดอร์จาก commit เก่ามาไว้ใน branch ปัจจุบันโดยไม่ต้องย้อนทั้ง branch วิธีนี้เหมาะมาก โดยใช้คำสั่ง:
git checkout <commit_hash> -- <file_or_directory>
เช่น ต้องการไฟล์ file.js จาก commit a1b2c3d4
git checkout a1b2c3d4 -- src/app/file.js
เพียงเท่านี้ไฟล์ file.js จาก commit เก่าก็จะถูกดึงมาใช้ทันที!
วิธีที่ 2: git revert (ย้อนไปแบบปลอดภัย)
อยากยกเลิกการเปลี่ยนแปลงจาก commit เก่าโดยไม่ต้องไปกระทบกับ commit ใหม่ ๆ ใช้คำสั่งนี้ได้เลย
git revert <commit_hash>
เช่น
git revert a1b2c3d4
คำสั่งนี้จะสร้าง commit ใหม่ที่ undo การเปลี่ยนแปลงจาก commit ที่เราเลือก แถมทำให้เราเห็นประวัติชัดเจนว่ามีการ revert อะไรไปบ้าง!
วิธีที่ 3: git reset (ย้อนกลับไปเลย)
หากอยากให้ branch กลับไปยัง commit เก่าทั้งหมด (ข้อควรระวัง: อาจทำให้ commit หลังจากนั้นหายไป) ใช้ git reset ได้สองแบบ
- ใน local เท่านั้น
git reset --hard <commit_hash>
- ใน remote ด้วย
git reset --hard <commit_hash>
git push --force
เช่น:
git reset --hard a1b2c3d4
git push --force
คำสั่งนี้จะทำให้ branch ปัจจุบันย้อนกลับไปที่ commit ที่เราระบุ และ commit หลังจากนั้นจะถูกลบทิ้ง (สำหรับ remote ต้องใช้ --force ด้วยนะ!)
วิธีที่ 4: git cherry-pick (เลือกบาง commit)
ถ้าอยากเลือกบาง commit มาใช้ ไม่ต้องย้อนทั้งหมด ใช้ cherry-pick ได้เลย:
git cherry-pick <commit_hash>
เช่น:
git cherry-pick a1b2c3d4
เท่านี้ commit a1b2c3d4 ก็จะถูกนำมาใช้ใน branch ปัจจุบันแบบไม่ต้องย้อนทั้งหมด!
เท่านี้ก็เรียบร้อยแล้ว! ลองเลือกวิธีที่เหมาะกับงานของแต่ละคนดูนะ จะย้อนกลับไปดูไฟล์เก่าหรือย้อนทั้ง branch ก็ทำได้ง่าย ๆ หวังว่าบทความนี้จะช่วยให้เพื่อน ๆ Dev ใช้งาน Git ได้อย่างมั่นใจมากขึ้นนะ!
สรุป
สำหรับ dev หลายคนที่ต้องการย้อนกลับไปใช้ commit เก่าใน Git โดยไม่กระทบกับไฟล์ปัจจุบัน หรือแม้แต่อยากให้ย้อนกลับไปทั้ง branch วิธีทำไม่ยาก! มาเรียนรู้วิธีง่าย ๆ ที่จะดึง commit กลับมา ไม่ว่าจะใช้ checkout สำหรับดึงไฟล์จาก commit เก่ามาใช้, revert สำหรับการสร้าง commit ใหม่ที่ลบการเปลี่ยนแปลงเก่า, reset สำหรับการย้อนทั้ง branch, หรือ cherry-pick เพื่อเลือก commit ที่ต้องการเฉพาะบางตัว แค่ไม่กี่คำสั่งก็พร้อมดึง commit กลับมาใช้งานได้ทันที