How to recover deleted git branch?
จะทำยังไง!! หากเราเผลอลบ branch ใน local ก่อนที่จะ push ขึ้น origin remote นั้นอาจจะทำให้เราเสียเวลาไปทั้งวันหรือมากกว่านั้น เพื่อที่จะทำสิ่งที่เสร็จแล้วอีกครั้งอยากจะเขกโต๊ะสักสิบที 🤦🏼♂️
แต่เดี๋ยวก่อน มันต้องมีวิธี recover commited สิ ใช่ครับมันมีอยู่จริง แต่เราอาจจะไม่เคยใช้มัน หรืออาจจะหัวร้อนจนลืม ยิ่งถ้าเป็น feature ที่ต้องรีบเอาขึ้น Prodution แล้วล่ะ ใจมันเริ่มสั่น แต่พอเรามานั่งคิดดี ๆ อีกที เอ๊ะ เราทำได้ Let’s get it
Experimental
- ให้ลอง checkout จาก branch ปัจจุบัน
- ให้ลองแก้ไข code หรือ ลบไฟล์ หรืออะไรก็ได้
- ให้ทำการ commit สิ่งที่เปลี่ยนแปลงไป
- ให้ทำการ checkout กลับมาที่ branch ก่อนหน้า แล้วทำการลบ branch ใหม่ที่เราเพิ่งสร้างขึ้นมา
- ให้เราใช้คำสั่ง
git reflog show
เราก็จะให้ history ให้ทำการ copy hash ของ branch ที่เราต้องการนำมันกลับมา - กด
q
เพื่อทำการออกจากหน้า git history - ทำการ checkout จาก hash ที่เรา copied มา
git checkout {hash}
เรียบร้อยครับ
Video Example 🙌
Hmmm โล่งใจ… 😂
Conclusion
เหตุการณ์ไม่คาดคิดอาจจะเกิดขึ้นได้ตลอดเวลา เลยอยากจะแนะนำว่า push ขึ้นไป origin remote ทุกครั้งที่เสร็จหรือผ่านจุด check point ที่ตั้งเอาไว้ก็น่าจะดูเป็นวิธี ที่ปลอดภัยกว่านะครับ แล้วค่อยไป cleaning branches ทีหลังก็ไม่เสียหายอะไร
แต่เราก็อาจจะกังวลกลัวจะไปแย่ง queue ของ CI project อื่น แต่กลับกันต้องก็อาจจะต้องแลกมาด้วยการที่เราต้องมานั่งปวดหัว ก็ดูไม่น่าคุ้ม หรือใครจะ stash commit เอาก็ได้นะครับ แต่ก็อย่าลืมเพิ่ม message ด้วยนะ ไม่งั้นอาจจะ งง ได้ สุดท้ายแล้วผมก็หวังว่า tips เล็ก ๆ น้อย ๆ นี้น่าจะเป็นประโยชน์ สวัสดีครับ