เมื่อคุณทำงานกับแอปพลิเคชัน ระบบควบคุมเวอร์ชันเช่น Git มีความสำคัญอย่างยิ่งในการติดตามการเปลี่ยนแปลง ทำงานร่วมกับนักพัฒนารายอื่นในการทำแอพ และรักษาประวัติที่สะอาดและเป็นระเบียบ หนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ Git คือความสามารถในการ “undo” การเปลี่ยนแปลง ไม่ว่าคุณจะทำโค้ดผิดพลาด คอมมิตเร็วเกินไป หรือแม้กระทั่งคอมมิชชันหาย Git ก็มีเครื่องมือมากมายสำหรับย้อนรอย บทความนี้จะแนะนำคุณเกี่ยวกับคำสั่ง Git ที่จำเป็นเหล่านี้และแสดงให้เห็นว่าคุณสามารถใช้คำสั่งเหล่านั้นในบริบทของการทำแอพได้อย่างไร
1. การคืนค่าการยอมรับการเปลี่ยนแปลง (Commits)
ลองจินตนาการว่าคุณกำลังทำแอพและคุณเพิ่งเพิ่มคุณลักษณะใหม่เข้าไป หลังจากยอมรับการเปลี่ยนแปลง คุณพบว่าคุณลักษณะนี้ก่อให้เกิดปัญหามากกว่าที่แก้ไข นั่นคือสิ่งที่ git revert
คำสั่งมีประโยชน์
คำ git revert
สั่งสร้างการยืนยันใหม่ที่ยกเลิกการเปลี่ยนแปลงที่เกิดขึ้นในการยืนยันก่อนหน้านี้ คำสั่งนี้ปลอดภัยที่จะใช้ใน repository สาธารณะเนื่องจากไม่เปลี่ยนแปลงประวัติการคอมมิตที่มีอยู่ ไวยากรณ์คือ:
git revert [commit]
คุณสามารถค้นหาคอมมิชชันแฮชโดยใช้ git log
แทนที่[commit]
ด้วยแฮชของการคอมมิตที่คุณต้องการเปลี่ยนกลับ คำสั่งจะเปิดตัวแก้ไขข้อความที่กำหนดค่าของคุณเพื่อป้อนข้อความยืนยันสำหรับการคืนค่าใหม่
ตัวอย่างเช่น หากคุณแนะนำจุดบกพร่องด้วย commit abc123
คุณจะต้องใช้ git revert abc123
การดำเนินการนี้จะสร้างการคอมมิตใหม่ที่เลิกทำการเปลี่ยนแปลงที่เกิดขึ้น ใน abc123
ขณะที่ยังคงรักษาประวัติเดิมไว้
2. รีเซ็ตไดเร็กทอรีการทำงานของคุณ
ในบางครั้ง คุณอาจทำการเปลี่ยนแปลงกับแอปที่คุณต้องการยกเลิกทั้งหมด ใน Git git reset
เป็นเครื่องมือสำหรับงานนี้
คำ git reset
สั่งจะย้ายHEAD
ตัวชี้ไปยังการกระทำที่ระบุ ซึ่งจะ “rewinding” โปรเจ็กต์ของคุณไปยังจุดนั้นได้อย่างมีประสิทธิภาพ มีสามโหมดหลัก: อ่อน ผสม (default) และยาก
2.1 ซอฟต์รีเซ็ต (Soft Reset)
ซอฟต์รีเซ็ต ( git reset --soft [commit]
) ย้ายHEAD
ไปยังคอมมิชชันอื่น แต่จะปล่อยให้ดัชนีการแสดงละครและไดเร็กทอรีการทำงานไม่ถูกแตะต้อง เหมือนกับว่าไม่ได้ [commit]
ทำคอมมิชชันหลังจากนั้น แต่การเปลี่ยนแปลงจะถูกรักษาไว้และจัดฉาก
2.2 รีเซ็ตแบบผสม (Mixed Reset)
การรีเซ็ตแบบผสม ( git reset --mixed [commit]
หรือ git reset [commit]
) จะย้าย HEAD
และรีเซ็ตดัชนีการจัดเตรียมให้ตรงกัน [commit]
แต่ปล่อยให้ไดเร็กทอรีทำงานเพียงอย่างเดียว การเปลี่ยนแปลงจะถูกรักษาไว้แต่ไม่ได้จัดฉาก
2.3 ฮาร์ดรีเซ็ต (Hard Reset)
การฮาร์ดรีเซ็ต ( git reset --hard [commit]
) เป็นรูปแบบที่รุนแรงที่สุด โดยจะย้าย HEAD
รีเซ็ตดัชนีการจัดเตรียม และเปลี่ยนไดเร็กทอรีการทำงานให้ [commit]
ตรงกัน การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นหลังจากนั้น [commit]
จะหายไปโดยสิ้นเชิง
ใช้ฮาร์ดรีเซ็ตด้วยความระมัดระวัง หากมีการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดในพื้นที่จัดเตรียมหรือไดเร็กทอรีการทำงาน การเปลี่ยนแปลงเหล่านั้นจะสูญหายไป
3. การใช้ Reflog เพื่อกู้คืน Commits ที่หายไป
หากคุณเคยใช้ git reset
และรู้ว่าคุณต้องการคอมมิชชันบางส่วนที่คุณทิ้งไป ไม่ต้องตกใจ Git มีกลไกในตัวสำหรับกู้คืนคอมมิชชันที่หายไปซึ่งเรียกว่า reflog
ทุกการกระทำใน Git ที่ย้ายHEAD
จะทิ้งบันทึกไว้ในบันทึกการอ้างอิง หรือ reflog
หากต้องการดู reflog ให้ใช้คำ git reflog
สั่ง นี่แสดงรายการการกระทำที่ผ่านมาของคุณตามลำดับเวลาย้อนกลับ โดยแต่ละรายการมีแฮช
หากคุณเห็นคอมมิชชันที่หายไปใน reflog คุณสามารถกู้คืนได้โดย git reset
ใช้ ตัวอย่างเช่น หากคอมมิตแฮชใน reflog คือ abc123
คุณจะใช้ git reset --hard abc123
เพื่อกู้คืนโปรเจ็กต์ของคุณเป็นสถานะนั้น
reflog เป็นเครือข่ายความปลอดภัยและเป็นหนึ่งในเครื่องมือที่ทรงพลังที่สุดของ Git มีวิธีเลิกทำเกือบทุกอย่างและทำให้โครงการของคุณกลับสู่สถานะการทำงาน
4. การจัดเก็บการเปลี่ยนแปลง (Stashing Changes)
ในขณะที่ทำแอพ อาจมีบางครั้งที่คุณกำลังทำงานกับฟีเจอร์ใหม่หรือแก้ไขจุดบกพร่อง และจำเป็นต้องเปลี่ยนสาขาเพื่อทำงานอย่างอื่น แต่คุณไม่ต้องการทำงานครึ่งๆกลางๆ นั่นคือสิ่ง git stash
ที่เข้ามา
คำ git stash
สั่งจะบันทึกการเปลี่ยนแปลงชั่วคราวที่คุณยังไม่ได้ยืนยัน เพื่อให้คุณสามารถเรียกคืนได้ในภายหลัง เมื่อคุณพร้อมที่จะทำงานต่อ คุณสามารถเรียกคืนการเปลี่ยนแปลงที่เก็บไว้ git stash apply
ด้วย
นี่คือวิธีการทำงาน:
หากคุณกำลังทำงานกับแอปและมีการเปลี่ยนแปลงในไดเร็กทอรีการทำงานที่คุณต้องการซ่อน เพียง git stash
พิมพ์ หากต้องการรับการเปลี่ยนแปลงในภายหลัง คุณสามารถ git stash apply
ใช้ หากคุณมีที่ซ่อนหลายอันและต้องการใช้อันใดอันหนึ่ง ให้ใช้ git stash list
เพื่อดูทั้งหมดและ git stash apply stash@{n}
ใช้อันที่คุณต้องการn
จำนวนของที่ซ่อนอยู่ ที่ไหน
คุณลักษณะนี้เป็นวิธีที่ดีในการทำให้ประวัติการกระทำของคุณสะอาดและจัดระเบียบงานของคุณ โดยเฉพาะอย่างยิ่งเมื่อคุณต้องการสลับไปมาระหว่างงานต่างๆ ในกระบวนการทำแอพของคุณ
Git เป็นเครื่องมือที่มีประสิทธิภาพในมือของนักพัฒนา และการทำความเข้าใจวิธีเลิกทำการเปลี่ยนแปลงอย่างมีประสิทธิภาพเป็นทักษะที่สำคัญในการทำแอพ ไม่ว่าคุณจะต้องการคืนค่าคอมมิชชันที่มีปัญหา รีเซ็ตโปรเจ็กต์ของคุณเป็นสถานะก่อนหน้า กู้คืนคอมมิตที่หายไป หรือซ่อนการเปลี่ยนแปลงไว้ใช้ในภายหลัง Git มีวิธีแก้ปัญหาสำหรับคุณ
อย่างไรก็ตาม สิ่งสำคัญคือต้องระมัดระวังเมื่อใช้คำสั่งเหล่านี้ โดยเฉพาะอย่างยิ่งคำสั่งที่เปลี่ยนแปลงประวัติการคอมมิตของคุณอย่างถาวร git reset --hard
เช่น ตรวจสอบให้แน่ใจเสมอว่าคุณได้สำรองโค้ดของคุณหรือโค้ดของคุณถูกพุชไปยังที่เก็บระยะไกลก่อนที่จะใช้คำสั่งทำลายล้าง ด้วย Git คุณพร้อมรับมือกับข้อผิดพลาด ปรับตัวให้เข้ากับข้อกำหนดที่เปลี่ยนแปลง และรักษาประวัติการคอมมิตที่สะอาดและมีประโยชน์