เมื่อทำงานในทีมขนาดใหญ่ หรือเมื่อเข้ามาทำงานในโปรเจกต์ที่มีอยู่แล้ว หลายครั้งที่เราต้องการรู้ว่า Code บรรทัดใดบรรทัดหนึ่งถูกเขียนโดยใครและเมื่อไร เพราะเหตุใดจึงเขียนแบบนั้น บล็อกนี้จะอธิบายเครื่องมือที่มีประโยชน์คือ Git Blame และ Git Log ซึ่งเป็นคำสั่งที่ช่วยให้เราติดตามประวัติ Code ได้อย่างมีประสิทธิภาพ
ทำไมต้องรู้ว่าใครเขียน Code บรรทัดไหน?
การติดตามประวัติ Code มีความสำคัญในหลายด้าน:
- Debugging: เมื่อพบ Bug เราสามารถหาว่าตั้งแต่เมื่อไรที่ Bug นี้เข้ามาในระบบ และใครเป็นคนเขียน Code ที่มีปัญหา
- Code Review: ช่วยให้เราเข้าใจการเปลี่ยนแปลง (Change) และเหตุผลในการเปลี่ยน
- Accountability: ทีมงานสามารถรับผิดชอบต่องานของตนเองได้อย่างชัดเจน
- Knowledge Transfer: ช่วยในการถ่ายทำความรู้เมื่อสมาชิกทีมใหม่เข้ามา
Git Blame คืออะไร?
Git Blame เป็นคำสั่งที่ใช้เพื่อดูว่าแต่ละบรรทัดของไฟล์ถูกเขียน (หรือแก้ไข) โดยใครและเมื่อไร คำว่า “blame” อาจฟังดูลบหลัง แต่ในความเป็นจริงมันเป็นเพียงการ “ระบุ” (Identify) ผู้เขียน ไม่ได้ความหมายว่าการตำหนิใครแต่อย่างใด
วิธีใช้พื้นฐาน
คำสั่งพื้นฐานของ Git Blame:
git blame filename.py
เมื่อรันคำสั่งนี้ Git จะแสดงผลลัพธ์ที่มีลักษณะประมาณนี้:
^a1b2c3d (Somchai Suksiriprom 2024-01-15 10:30:22 +0700 1) def hello():
^a1b2c3d (Somchai Suksiriprom 2024-01-15 10:30:22 +0700 2) print("Hello, World!")
8f9e0a1b (Niran Kulapongse 2024-02-20 14:15:45 +0700 3) print("Updated greeting")
อ่าน Output ของ Git Blame
ผลลัพธ์ของ Git Blame ประกอบด้วยข้อมูล 4 ส่วนหลัก:
- Commit Hash: รหัส Commit ที่สั้น (เช่น a1b2c3d)
- Author Name: ชื่อผู้แก้ไข
- Date and Time: วันเวลาที่ทำการแก้ไข
- Line Number: หมายเลขบรรทัด
Git Blame เฉพาะ Range ของบรรทัด
หากไฟล์มีจำนวนบรรทัดมากเกินไป สามารถดูเพียง Range ที่ต้องการได้:
git blame -L 10,20 filename.py
คำสั่งนี้จะแสดงเฉพาะบรรทัดที่ 10 ถึง 20 เท่านั้น
Git Blame ตาม Commit เก่า
ถ้าต้องการดูสถานะของไฟล์ในเวลาที่ผ่านมา:
git blame abc123 -- filename.py
โดยที่ abc123 คือ Commit Hash ที่ต้องการ
ดู Full Commit จาก Git Blame
เมื่อเจอ Commit Hash ที่สนใจ สามารถดูรายละเอียดเต็มของ Commit นั้นได้:
git show a1b2c3d
คำสั่งนี้จะแสดง Commit message, Author, Date, และ Changes ทั้งหมด
Git Log คืออะไร?
Git Log เป็นคำสั่งที่ใช้แสดงประวัติของ Commits ในลำดับย้อนกลับไปตามเวลา (ล่าสุดมาก่อน) ซึ่งช่วยให้เราเข้าใจว่า Project นี้เปลี่ยนแปลงมาอย่างไรตั้งแต่เริ่มต้น
คำสั่ง Git Log พื้นฐาน
git log
แสดงประวัติทั้งหมดพร้อม Commit Hash, Author, Date, และ Message
ตัวเลือก Git Log ที่สำคัญ
1. Git Log แบบสั้น (One-line)
git log --oneline
แสดงแต่ละ Commit ในรูปแบบ 1 บรรทัด ทำให้อ่านง่ายและเห็นภาพรวมได้ชัดเจน
2. Git Log แบบกราฟ
git log --graph --oneline --all
แสดงประวัติพร้อมกับ Graph ของ Branches ทำให้เห็นแนวเขตของการ Merge และ Branching ได้ชัดเจน ตัวเลือก –all จะแสดง Branches ทั้งหมด
3. ค้นหา Commits โดยผู้เขียน
git log --author="Somchai Suksiriprom"
แสดงเฉพาะ Commits ที่ Somchai Suksiriprom เขียน รองรับการใช้ Regex ได้ด้วย
4. ค้นหา Commits ตามช่วงเวลา
git log --since="2024-01-01" --until="2024-12-31"
แสดง Commits ที่ทำในช่วงเวลาที่กำหนด
5. ดูการเปลี่ยนแปลงแต่ละ Commit (Diff)
git log -p
แสดง Diff (การเปลี่ยนแปลง) แบบบรรทัดต่อบรรทัด สำหรับแต่ละ Commit ใช้เมื่อต้องการอ่านรายละเอียดเต็ม
6. ติดตามไฟล์ที่เปลี่ยนชื่อ
git log --follow -- filename.py
เมื่อไฟล์ถูกเปลี่ยนชื่อ (Rename) คำสั่งนี้จะติดตามประวัติต่อไปแม้หลังจากการเปลี่ยนชื่อ
ค้นหา Commit ที่เกี่ยวข้องกับ Bug (Git Log -S)
หากต้องการค้นหา Commit ที่เพิ่มหรือลบ Code บางส่วน สามารถใช้ option -S (Pickaxe):
git log -S "buggy_function()"
คำสั่งนี้จะค้นหา Commits ที่เพิ่มหรือลบ “buggy_function()” ออกไป ช่วยในการอ้างอิง Bug ได้อย่างแม่นยำ
Integration กับ VSCode: GitLens Extension
สำหรับผู้ที่ใช้ VSCode ไม่จำเป็นต้องใช้คำสั่งจากเทอร์มินัล สามารถติดตั้ง GitLens Extension ซึ่งให้ความสามารถในการ:
- เห็นข้อมูล Git Blame ตรงหน้าแต่ละบรรทัดใน Editor
- Hover เพื่อดูรายละเอียดของ Commit เต็มๆ
- ดูประวัติไฟล์ (File History) ในกรรมการ Side Panel
- เปรียบเทียบ (Compare) Commits ต่างๆได้อย่างง่ายดาย
- ทีมสามารถติดตามการเปลี่ยนแปลงของ Code ได้อย่างเหมาะสม
- ง่ายต่อการ Debugging เมื่อพบปัญหาในระบบ
- สามารถรวมกับเครื่องมือ CI/CD ได้เพื่อการตรวจสอบและปล่อยผลลัพธ์ที่ดีขึ้น
สรุป
Git Blame และ Git Log เป็นเครื่องมือที่มีประโยชน์อย่างยิ่งสำหรับ Developer ที่ต้องการเข้าใจประวัติและเหตุผลของ Code ในโปรเจกต์ ด้วยการใช้คำสั่งเหล่านี้อย่างถูกต้อง เราสามารถ:
- ติดตามว่าใครเขียน Code บรรทัดไหน
- ค้นหา Bugs และเข้าใจต้นตอของปัญหา
- เรียนรู้จาก Code ของเพื่อนร่วมทีม
- ปรับปรุงคุณภาพของ Code ผ่านการ Code Review ที่ดียิ่งขึ้น
จงใช้ประโยชน์จาก Git Blame และ Git Log อย่างเต็มที่เพื่อทำให้ Code ของคุณและทีมคุณเป็นระบบที่มีคุณภาพสูงและถูกสอบทาน
