เปลี่ยน git merge ไปใช้ diff3
ตั้งใจจะเปิดหาบทความที่สอนการดู diff
ของ git merge
เพราะปกติไม่เคยอธิบาย
เป็นคำพูดให้คนอื่นฟังเข้าใจได้เลย มีแต่ต้องทำให้ดู แล้วก็เพิ่งรู้ว่ามีแบบที่เข้าใจได้ง่ายกว่า เรียกว่า diff3
ให้ใช้มาตั้งหลายปีแล้ว
คำสั่งในการใช้เปลี่ยนรูปแบบ
ลองทำตามได้เลย ยังไม่ต้องรู้เรื่องก็ได้ เพราะมั่นใจว่าไม่เสียใจแน่นอน
git config --global merge.conflictstyle diff3
# หรือถ้าไม่แน่ใจก็ลองแค่ directory เดียวก่อน
git config merge.conflictstyle diff3
ที่มา: stackoverflow.com/questions/27417656
ตัวอย่างของ diff
จากการแก้ code
ของเดิม
func CalculateTotal(a, b int) int {
return a + b
}
อันที่เราแก้ (HEAD, Current Change)
func CalculateTotal(a, b int) int {
return a + b + 10
}
อันที่คนอื่นแก้มาแล้วเรากำลังจะ merge เข้า (Incoming Change)
func CalculateTotal(a, b int) int {
return a + b - 5
}
ได้ออกมาแบบนี้ตอน conflict
func CalculateTotal(a, b int) int {
<<<<<<< HEAD
return a + b + 10
=======
return a + b - 5
>>>>>>> branch-name
}
หลายๆครั้งเวลาเจอแบบนี้ในลักษณะที่ conflict กันหลายบรรทัด จะค่อนข้างสับสนพอสมควรว่าควรจะเลือกอันไหนดี
ถ้าใช้ diff3
จะได้ conflict แบบนี้แทน:
func CalculateTotal(a, b int) int {
<<<<<<< HEAD
return a + b + 10
||||||| base
return a + b
=======
return a + b - 5
>>>>>>> branch-name
}
สังเกตได้ว่าแทนที่จะมีแค่สองสถานะให้เรางงว่าจะเลือกอันไหนดี
diff3
จะเพิ่มสถานะbase
เข้ามาด้วยเพื่อให้เห็นว่าจุดตั้งต้นก่อนที่จะ conflict มันคืออะไรมาก่อน เพื่อช่วยเพิ่มข้อมูลตัดสินใจว่าควรจะเลือกอันไหนดี