Git Diff เป็นคำสั่งหลักในการตรวจสอบผลต่างของไฟล์ในโปรเจกต์ของคุณ มันช่วยให้เห็นความเปลี่ยนแปลงในโค้ด ตรวจสอบว่าใครแก้ไขอะไร และทำให้ Code Review เป็นเรื่องง่ายขึ้น บทความนี้จะอธิบายวิธีการอ่าน Git Diff และเข้าใจรูปแบบต่างๆ ของมันอย่างละเอียด
รูปแบบ Output ของ Git Diff
เมื่อคุณรันคำสั่ง git diff ระบบจะแสดงผลลัพธ์ในรูปแบบมาตรฐาน โดยแสดงเปรียบเทียบระหว่างไฟล์เก่า (old version) และไฟล์ใหม่ (new version)
--- a/filename (old version)
+++ b/filename (new version)
@@ -10,5 +10,6 @@
-old line
+new line
unchanged line
รูปแบบนี้ประกอบด้วยส่วนสำคัญ 3 ส่วน:
- — a/filename = ไฟล์เก่า (ก่อนการเปลี่ยนแปลง)
- +++ b/filename = ไฟล์ใหม่ (หลังจากการเปลี่ยนแปลง)
- @@ … @@ = ส่วนที่เปลี่ยนแปลง (Hunk Header) ซึ่งบ่งชี้ตำแหน่งและจำนวนบรรทัด
วิธีการอ่าน Hunk Header (@@ … @@)
Hunk Header เป็นส่วนที่สำคัญในการทำความเข้าใจตำแหน่งที่มีการเปลี่ยนแปลง เขียนในรูปแบบ @@ -startline,count +startline,count @@
@@ -10,5 +10,6 @@
ความหมาย:
- -10,5: ในไฟล์เก่า เริ่มจากบรรทัดที่ 10 แสดง 5 บรรทัด
- +10,6: ในไฟล์ใหม่ เริ่มจากบรรทัดที่ 10 แสดง 6 บรรทัด
ในตัวอย่างนี้ ไฟล์เก่ามี 5 บรรทัด แต่ไฟล์ใหม่มี 6 บรรทัด แสดงว่ามีการเพิ่มบรรทัดหนึ่งบรรทัด
สัญลักษณ์ในการแสดงการเปลี่ยนแปลง
Git Diff ใช้สัญลักษณ์ต่อไปนี้เพื่อแสดงการเปลี่ยนแปลง:
- – (เครื่องหมายลบ) = บรรทัดที่ถูกลบไป (Deleted) มักแสดงเป็นสีแดง
- + (เครื่องหมายบวก) = บรรทัดที่ถูกเพิ่มเข้ามา (Added) มักแสดงเป็นสีเขียว
- ไม่มีสัญลักษณ์ = บรรทัดที่ไม่มีการเปลี่ยนแปลง (Unchanged)
รูปแบบต่างๆ ของคำสั่ง Git Diff
คำสั่ง git diff มีหลายรูปแบบเพื่อใช้งานในสถานการณ์ต่างๆ:
# เปรียบเทียบ Working Directory กับ Staging Area
git diff
# เปรียบเทียบ Staging Area กับ Commit ล่าสุด
git diff --staged
# (--cached เป็น alias เดียวกัน)
# เปรียบเทียบ Working Directory กับ Commit ล่าสุด
git diff HEAD
# เปรียบเทียบกับ Commit ก่อนหน้า
git diff HEAD~1
# เปรียบเทียบระหว่าง Branch สองตัว
git diff branch1 branch2
# แสดงเฉพาะชื่อไฟล์ที่เปลี่ยนแปลง
git diff --name-only
# แสดงสถิติการเปลี่ยนแปลง
git diff --stat
การใช้ git diff –stat สำหรับสรุปการเปลี่ยนแปลง
เมื่อคุณต้องการดูภาพรวมของการเปลี่ยนแปลงโดยไม่ต้องมองรายละเอียดแต่ละบรรทัด ให้ใช้ git diff --stat เพื่อดูจำนวนเพิ่มเติมและลบออก
git diff --stat
Output:
main.js | 10 +++++++---
config.js | 5 ++---
utils.js | 15 +++++++++++++++
3 files changed, 27 insertions(+), 13 deletions(-)
ใช้ git diff –word-diff เพื่ออ่านผลต่างของคำ
บางครั้งคุณอยากเห็นผลต่างในระดับคำแทนระดับบรรทัด ซึ่งจะช่วยให้เห็นการเปลี่ยนแปลงที่เล็กน้อยชัดเจนมากขึ้น
# แสดงผลต่างในระดับคำ
git diff --word-diff
# แสดงผลต่างของคำด้วยสีแตกต่าง
git diff --word-diff=color
ตั้งค่า Diff Tool ภายนอก
นอกจากการใช้ Git Diff ในเทอร์มินัล คุณสามารถตั้งค่าเครื่องมือ Diff ภายนอกเพื่อให้มีประสบการณ์ที่ดีขึ้น เช่น Meld, VS Code, หรือ Vimdiff
# ตั้งค่า Vimdiff เป็น Diff Tool
git config --global diff.tool vimdiff
git config --global difftool.prompt false
# ตั้งค่า Meld
git config --global diff.tool meld
# ตั้งค่า VS Code
git config --global diff.tool vscode
git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'
การใช้ git difftool
หลังจากตั้งค่า Diff Tool แล้ว คุณสามารถใช้คำสั่ง git difftool เพื่อเปิดเครื่องมือ Diff ที่คุณต้องการ
# เปิด Diff Tool ที่ตั้งค่าไว้
git difftool
# ใช้ Diff Tool เฉพาะตัว
git difftool --tool=meld
git difftool --tool=vscode
# เปรียบเทียบกับ Commit ก่อนหน้า
git difftool HEAD~1
# เปรียบเทียบระหว่าง Branch สองตัว
git difftool branch1..branch2
ตัวเลือกขั้นสูงของ Git Diff
Git Diff มีตัวเลือกขั้นสูงมากมายสำหรับการใช้งานพิเศษ:
# ไม่ใช้ Pager
git diff --no-pager
# ไฮไลต์การเปลี่ยนแปลงของคำ
git diff --color-words
# แสดงบรรทัดบริบท 5 บรรทัด
git diff -U5 filename
# ละเว้นช่องว่างทั้งหมด
git diff --ignore-all-space
# ละเว้นการเปลี่ยนแปลงของช่องว่าง
git diff --ignore-space-change
# ตรวจสอบการเปลี่ยนชื่อไฟล์
git diff -M
# ตรวจสอบการคัดลอกไฟล์
git diff -C
การใช้ Git Diff ใน VS Code
VS Code มี Git Integration ที่ยอดเยี่ยม ช่วยให้คุณดูและจัดการ Diff ได้อย่างสะดวก คุณสามารถเปิด Source Control Panel โดยคลิกไอคอน Git หรือกดปุ่ม Ctrl+Shift+G เพื่อดูไฟล์ที่เปลี่ยนแปลง
Best Practices สำหรับการใช้ Git Diff
- ใช้
git diff --statก่อนเพื่อดูภาพรวมของการเปลี่ยนแปลง จากนั้นจึงดูรายละเอียดเต็มรูปแบบ - ใช้
--ignore-all-spaceเมื่อต้องการเปรียบเทียบโค้ดโดยไม่สนใจการเปลี่ยนแปลงช่องว่าง - เลือกใช้ Diff Tool ที่มี GUI เช่น Meld หรือ VS Code เพื่อการตรวจสอบที่ง่ายขึ้น
- ใช้
git diff HEADเพื่อดูการเปลี่ยนแปลงทั้งหมดเปรียบเทียบกับ Commit ล่าสุด - ทำการ Code Review อย่างละเอียดโดยใช้ Git Diff เพื่อตรวจสอบไม่ให้มีบั๊กเข้ามายังโปรเจกต์
สรุป
Git Diff เป็นเครื่องมือที่สำคัญอย่างยิ่งสำหรับนักพัฒนา มันช่วยให้เห็นการเปลี่ยนแปลงในโค้ด ตรวจสอบความถูกต้อง และทำให้ Code Review เป็นเรื่องที่ง่ายและมีประสิทธิภาพมากขึ้น การเรียนรู้การอ่าน Git Diff อย่างถูกต้องจะช่วยให้คุณเป็น Developer ที่ดีขึ้น
