วิธีดึง Commit เก่าใน Git กลับมา

Nov. 13, 2024 · boychawin

สวัสดี 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 กลับมาใช้งานได้ทันที