git-push-force
วันนี้เจอประสบการณ์ไม่ค่อยดีสำหรับการใช้งาน git ด้วยคำสั่ง

$git push --force

ผลที่ตามมาก็ไฟไหม้สิครับ
ทั้ง code หาย
ทั้ง commit history ต่าง ๆ หายไปหมด
งานของเราอาจจะดี แต่ของคนอื่นหายหมด
ภาพรวมคือ งานเข้าสิครับ !!

เป็นภัยต่อชีวิต เป็นพิษต่อทีมมาก ๆ

คำถามที่น่าสนใจคือ ทำไมเราต้องใช้ git push force ด้วยล่ะ ?

ตอบง่าย ๆ คือ มัน(มัก)ง่ายไงล่ะ
ซึ่งมันเกิดจากเราทำอะไรผิดพลาดก็ไม่รู้
และส่งผลให้เราไม่สามารถ push code ขึ้นไปยัง repository ได้
ซึ่งเราสามารถใช้งานผ่านคำสั่งต่าง ๆ ของ git เพื่อแก้ไขได้เช่น

  • git commit –amend
  • git rebase
  • git reset

แต่บางครั้งเมื่อใช้สิ่งต่าง ๆ เหล่านี้
ก็ไม่สามารถ push code ขึ้นไปได้
นั่นคือปัญหาเรื่องของ commit history นั่นเอง
ดังนั้นเราจึง git push force มันไปเลย !!
ง่าย ๆ สบาย ๆ แต่พังกระจาย
ถ้าไม่มีการสื่อสารที่ดีพอ

หรือบางครั้งขี้เกียจ merge code ที่มันขัดแย้งกันเยอะ
ดังนั้นจึงให้ตัวเราเองเป็นที่ตั้ง
จากนั้น git push force มันไปเลย !!

ดังนั้นก่อนอื่นต้องทำความเข้าใจว่าผลที่ตามมาจากการกระทำมีอะไรบ้าง ?

มันจะเขียนทับการเปลี่ยนแปลงทั้งหมดเลยนะ
ดังนั้นคุยกับทีมก่อนว่า ไม่มีใครที่จะเปลี่ยนแปลงอีกแล้วนะ
ทำการ update สิ่งต่าง ๆ ให้เรียบร้อย
แก้ไขสิ่งต่าง ๆ ให้เรียบร้อย
จากนั้นจึงทำการ git push force
จึงจะปลอดภัยมากขึ้น

แต่ถ้าต้องการใช้จริง ๆ แนะนำให้ใช้ git push – -force-with-lease ดีกว่านะครับ
ซึ่งมันจะปลอดภัยต่อชีวิตอย่างมาก

สุดท้ายแล้วแนะนำให้ใช้ git push force เป็นทางเลือกสุดท้ายเท่านั้น

เช่นการลบ commit history ที่มีข้อมูลที่เป็นความลับ
หรือเป็นสิ่งที่ไม่ต้องการให้มีจริง ๆ
ซึ่งมันบ่งบอกว่า repository ของคุณมันแย่มาก ๆ
หรือกระบวนการทำงานต้องปรับปรุงได้แล้วนะ

Reference Websites
https://robots.thoughtbot.com/git-push-force-with-lease
https://developer.atlassian.com/blog/2015/04/force-with-lease/

Tags: