Git Diff อ่านอย่างไร? ทำความเข้าใจผลต่างของไฟล์ทุกรูปแบบ

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 ที่ดีขึ้น