4 แนวทางแก้ไข สำหรับปัญหาทั่วไปของ Git

17-ม.ค.-20

คัมภีร์เทพ IT

ปัจจุบัน Developers ส่วนใหญ่มักใช้งาน Version Control กันอยู่แล้ว ซึ่ง Version Control ที่ได้รับความนิยมมากที่สุดตัวหนึ่งก็คือ Git และแน่นอนว่าในการใช้งานจริง คุณอาจพบเจอปัญหาในการใช้งานมาบ้างไม่มากก็น้อย ดังนั้นบทความนี้จะมาบอกถึง 4 แนวทางแก้ไข สำหรับปัญหาทั่วไปของ Git

1. เพิ่มการเปลี่ยนแปลงใน Commit ล่าสุด

การแก้ไข Commit ล่าสุดนั้นมีประโยชน์อย่างมาก สำหรับคนที่ลืม Stage การเปลี่ยนแปลง ( ซึ่งก็น่าจะเคยเกิดกับทุกคนที่ใช้ Git :) )

สิ่งที่คุณควรทำก็คือ ให้ทำการ Stage File ที่คุณลืม Stage แล้วใช้คำสั่ง git commit --amend

สมมติว่าเราลืม Stage การเปลี่ยนแปลงใน README File, นี่คือสิ่งที่เราควรจะทำ:

คุณจะได้รับแจ้งให้แก้ไข Commit Message และจากนั้น การเปลี่ยนแปลงของ README.md ก็จะถูกเพิ่มไปยัง Commit ล่าสุด

2. แบ่ง Commit ล่าสุดออกเป็นหลาย ๆ Commits

สมมติว่าคุณมีปัญหาอื่นด้วย แล้วคุณดันเผลอทำการ Stage ไปโดยไม่ได้ตั้งใจ และจากนั้นก็ทำการ Commit ทั้งที่คุณตั้งใจที่จะทำการ Commit 2 ครั้ง

สิ่งที่คุณต้องทำคือ ทำการยกเลิก Commit โดยใช้คำสั่ง git reset:

จากนั้นใช้ git add เพื่อ Stage การเปลี่ยนแปลงของคุณ (ขอแนะนำให้ใช้ git add --patch แล้วทำการ Commit):

คุณสามารถทำ Process นี้ซ้ำได้ตามต้องการ:

3. Squash บาง Commits ก่อนหน้า ภายใน Commit เดียว

Developers ทุกคนควรจะรู้จักวิธี Squash (บีบรวม) Commit นี่คือสิ่งที่คุณอาจถูกร้องขอให้ทำในกรณีที่คุณมีส่วนร่วมใน Open Source และคุณได้ทำการ Commit Messages ที่ซ้ำซ้อนหรือผิดพลาดไป ซึ่งคุณสามารถจัดการปัญหานี้ได้ทั้งวิธีที่ใช้ git rebase และไม่ใช้ git rebase

สำหรับวิธีที่ไม่ใช้ git rebase, คุณสามารถ Squash Commit ก่อนหน้านี้ลงใน Commit เดียว โดยขั้นแรกคุณจะต้องใช้คำสั่ง git reset เพื่อย้อนกลับไปยัง Commit ที่คุณต้องการจะ Squash

คุณสามารถทำสิ่งนี้ได้ด้วยการใช้ HEAD~x กับคำสั่ง git rebase โดยที่ x คือจำนวน Commit ที่คุณต้องการจะ Squash  

ตัวอย่างเช่น หากคุณต้องการ Squash 3 Commits ก่อนหน้านี้ ภายใน Commit เดียว คุณจะต้อง Run คำสั่งต่อไปนี้:

เมื่อตรวจสอบที่ log ด้วยการใช้คำสั่ง git log แล้ว จะทำให้คุณเห็นว่า การเปลี่ยนแปลงทั้งหมดจาก 3 Commits ก่อนหน้านี้ยังอยู่ใน Machine ของคุณ เพียงแต่มันอยู่ในสถานะ Unstaged

เพื่อ Squash พวกมันเข้าด้วยกันใน Commit เดียว สิ่งที่คุณต้องทำก็คือ Stage พวกมันแล้วทำการ Commit พวกมันซะ:

ตอนนี้คุณได้ทำการ Squash ทั้ง 3 Commits ภายใน Commit เดียวเรียบร้อยแล้ว

อย่างที่กล่าวไปก่อนหน้านี้ คุณยังมีอีกทางเลือก คือการใช้ git rebase กับ Interactive Flags ซึ่งจะมีลักษณะดังนี้:

คุณสามารถแทนที่ Master ด้วย Branch ที่คุณจะ Merge มัน

git rebase -i จะนำคุณไปยัง Text Editor ที่มีลักษณะดังนี้:

สิ่งนี้อาจดูเหมือนจะน่ากังวลเล็กน้อยหากคุณไม่เคยทำ rebase มาก่อน แต่จริง ๆ แล้วมันไม่ยากอย่างที่คิด

หากต้องการ Squash ทั้ง 2 Commits นี้ คุณเพียงแค่แทนที่คำว่า pick ในบรรทัดที่ 2 ด้วยคำว่า squash:

ทำการ Save File (หากคุณอยู่ใน Vim, คุณสามารถทำได้โดยการใช้ :wq) และคุณจะถูกนำไปยัง Text Editor เพื่อเขียน Commit Message จากนั้นทำการ Save Commit ซึ่งถือว่าคุณทำเสร็จแล้ว

ตอนนี้คุณได้เห็น 2 วิธีที่แตกต่างกันในการ Squash Commit แล้ว คุณอาจสงสัยว่า ทำไมคุณถึงเลือกใช้ rebase ในเมื่อวิธีแรกนั้นง่ายกว่ามาก แต่การใช้ git rebase จะช่วยให้คุณสามารถควบคุมการเปลี่ยนแปลงจำนวนมาก ๆ (Big Change) ได้ดียิ่งขึ้น

4. รับการเปลี่ยนแปลงล่าสุด จาก Branch อื่น

เมื่อคุณทำงานกับ Feature Branches, นี่คือสิ่งที่คุณอาจจะต้องทำมันหลาย ๆ ครั้งในแต่ละวัน ซึ่งมี 2 วิธีในการทำเช่นนี้

วิธีที่มักพบบ่อยที่สุดก็คือ การใช้คำสั่ง git merge สิ่งที่คุณต้องทำก็คือ Run คำสั่ง git merge ด้วยชื่อของ Branch ที่คุณต้องการจะ Pull ตัวอย่างเช่น กรณีมีการเปลี่ยนแปลงล่าสุดจาก Master:

สิ่งนี้จะสร้าง Commit ขึ้นมาใหม่ ซึ่งมันคือ Merge Commit โดยที่ Merge Commit นั้นเป็นเพียงข้อบ่งชี้ว่ามีการ Merge เกิดขึ้นแล้ว และมันก็ไม่ใช่เรื่องแปลกอะไร ที่มี Commit เหล่านี้อยู่ใน git history ของคุณ

อย่างไรก็ตาม บางคนก็ไม่ชอบให้มี Merge Commits อยู่ใน History ของ Repository ของพวกเขา สำหรับคนที่คิดแบบนี้ คุณสามารถใช้ git rebase เพื่อ Catch up กับ Branch อื่น ๆ ซึ่งนี่เป็นวิธีที่บางคนใช้ในการ Catch up ระหว่าง Feature Branches กับ Master:

ตราบใดที่ไม่มีสิ่งผิดปกติเกิดขึ้น คุณสามารถทำสิ่งนี้กับการเปลี่ยนแปลงของคุณได้ตลอดบน Master Branch ซึ่งสิ่งนี้จะทำให้คุณไม่ต้องสร้าง Merge Commit ขึ้นมา

ที่มา:  https://dev.to/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด