สารบัญคู่มือ · บทที่ 10 จาก 11
เก็บงานด้วย Git และ Pull Request
บทที่ 10 จาก 11 · อ่านราว 12 นาที · อัปเดต 10 ตุลาคม 2569 · ระดับเริ่มต้น
สรุปใน 3 บรรทัด
- Git จดประวัติงานเป็น commit ทีละจุด ทำให้ย้อนกลับได้ทุกครั้งที่พลาด
- branch แยกงานแต่ละเรื่องออกจากงานหลัก งานหลักจึงใช้งานได้เสมอ
- Pull Request คือการขอรวมงานเข้างานหลัก โดยให้ทั้งคนและเครื่องตรวจก่อน
ควรอ่านก่อน
บทที่ 4: เครื่องมือแรกของ devอ่านจบแล้วคุณจะ
- ใช้คำสั่ง Git พื้นฐานบันทึกงานของตัวเองได้
- อธิบายได้ว่า branch และ Pull Request มีไว้ทำไม
- ย้อนกลับงานที่ผิดได้อย่างปลอดภัย
ทบทวน: commit คือจุดเซฟ
ใน บทที่ 4: เครื่องมือแรกของ dev เรารู้จัก Git แบบภาพรวมแล้ว บทนี้จะลงมือใช้จริง เริ่มจากการบันทึกงานในเครื่องของเรา แล้วค่อยไปถึงการทำงานร่วมกับคนอื่นและ agent ผ่าน Pull Request
บันทึกงานครั้งแรก
ต้องติดตั้ง Git ก่อน (ดาวน์โหลดได้ฟรีจากเว็บของ Git) แล้วเปิด terminal ในโฟลเดอร์โปรเจค เช่น โฟลเดอร์ที่มีไฟล์ index.html จากบทที่ 5
สองบรรทัดแรกใช้บอก Git ว่าเราเป็นใคร ทำแค่ครั้งเดียวต่อเครื่อง ชื่อและอีเมลนี้จะติดไปกับทุก commit
git config --global user.name "ชื่อของคุณ" git config --global user.email "อีเมลของคุณ" git init git status git add . git commit -m "บันทึกงานครั้งแรก" git log --oneline
| คำสั่ง | ทำอะไร |
|---|---|
git init | เริ่มให้ Git ดูแลโฟลเดอร์นี้ |
git status | ดูว่ามีไฟล์ไหนเปลี่ยนไปบ้าง |
git add . | เลือกไฟล์ที่เปลี่ยนทั้งหมด เตรียมบันทึก |
git commit -m "..." | บันทึกเป็นจุดเซฟ พร้อมข้อความ |
git log --oneline | ดูประวัติ commit แบบย่อ |
ตรวจผลยังไง
ข้อความ commit ที่ดี
ข้อความ commit คือโน้ตถึงตัวเราในอนาคต และถึงทุกคนที่มาอ่านประวัติ บอกให้ได้ว่าเปลี่ยนอะไร
| ไม่ดี | ดี |
|---|---|
| แก้ | เพิ่มปุ่มลบรายการ |
| update | ให้รายการยังอยู่หลังปิดหน้า |
| ลองใหม่ | ไม่สร้างรายการเมื่อช่องพิมพ์ว่าง |
หลายทีมเติมคำนำหน้าเพื่อบอกประเภทงาน เช่น feat: สำหรับฟีเจอร์ใหม่ และ fix: สำหรับแก้บั๊ก ทุก commit ของเว็บนี้ก็เขียนแบบนั้น
Branch: แยกงานออกจากงานหลัก
โปรเจคมี branch หลักหนึ่งเส้น มักชื่อ main หรือ master ซึ่งควรใช้งานได้เสมอ เวลาจะทำงานเรื่องใหม่ ให้แตก branch ออกมาก่อน เหมือนถ่ายสำเนาเอกสารไปแก้ แล้วค่อยเอาส่วนที่แก้กลับมารวม
git switch -c add-delete-button
คำสั่งนี้สร้าง branch ชื่อ add-delete-button และย้ายเข้าไปทำงานในนั้น ทุก commit หลังจากนี้จะอยู่ใน branch ใหม่ ส่วน branch หลักยังเหมือนเดิม ถ้างานไปผิดทาง ก็ทิ้ง branch นี้ได้โดยไม่กระทบงานหลักเลย
เวลาให้ agent ทำงานเรื่องใหม่ ให้แตก branch ก่อนทุกครั้ง เหมือนกับที่ต้อง commit ก่อนให้ agent ลงมือ
Pull Request: ขอรวมงาน พร้อมให้ตรวจก่อน
เมื่อทำงานใน branch เสร็จ เราจะส่ง branch ขึ้นบริการเก็บโค้ดออนไลน์ เช่น GitHub แล้วเปิด Pull Request (PR) เพื่อขอรวมงานเข้า branch หลัก หน้า PR มีสิ่งสำคัญ 3 อย่าง
- คำอธิบาย ว่าเปลี่ยนอะไร ตรวจอะไรแล้ว และอะไรที่ยังไม่ได้ตรวจ
- ความเปลี่ยนแปลงทั้งหมด ในแท็บ Files changed ซึ่งก็คือ diff ที่เราอ่านเป็นแล้วใน บทที่ 7: ตรวจงานที่ agent ทำ
- การตรวจอัตโนมัติ ที่รันเทสต์ทุกครั้งที่มีการส่งงาน รายละเอียดอยู่ใน บทที่ 11: เอางานขึ้นเว็บจริง
เมื่อทุกอย่างผ่าน จึงกดรวม (merge) เข้า branch หลัก
agent หลายตัวเปิด PR ให้ได้เอง ซึ่งช่วยมาก เพราะเราได้หน้าที่รวบรวมทุกอย่างไว้ให้ตรวจในที่เดียว ลองให้ agent ช่วยเขียนคำอธิบาย PR แบบนี้
เขียนคำอธิบาย Pull Request สำหรับงานใน branch นี้ ให้มีหัวข้อ: - เปลี่ยนอะไร - ตรวจอะไรแล้ว ด้วยวิธีไหน - อะไรที่ยังไม่ได้ตรวจ - ถ้ามีปัญหาหลังรวมงาน จะย้อนกลับยังไง
ตรวจผลยังไง
ย้อนกลับเมื่อพลาด
| สถานการณ์ | ทำอย่างไร |
|---|---|
| แก้ไฟล์แล้ว ยังไม่ commit และอยากทิ้งการแก้นั้น | git restore ชื่อไฟล์ (การแก้ที่ยังไม่บันทึกจะหายไปจริง ๆ) |
| commit ไปแล้ว และอยากยกเลิกผลของ commit นั้น | git revert รหัสของ commit สร้าง commit ใหม่ที่ย้อนผลให้ ประวัติเดิมยังอยู่ครบ |
| งานใน branch ไปผิดทางทั้งหมด | กลับไป branch หลัก แล้วไม่ต้องรวม branch นั้น |
ข้อผิดพลาดที่พบบ่อย
- ทำงานบน branch หลักตรง ๆ ถ้างานพังกลางทาง งานหลักก็พังไปด้วย
- commit ทีเดียวก้อนใหญ่ ถ้ามีปัญหาจะหายากว่ามาจากตรงไหน และย้อนกลับเฉพาะส่วนไม่ได้
- ข้อความ commit ไม่มีความหมาย อีกสามเดือนจะไม่มีใครรู้ว่า "แก้" หมายถึงแก้อะไร
- commit ไฟล์ .env รหัสลับจะติดไปในประวัติ ดู บทที่ 9: ความปลอดภัย
เช็กความเข้าใจ
1. ทำไมควรแตก branch ก่อนให้ agent ทำงานเรื่องใหม่
2. commit ที่รวมเข้า branch หลักไปแล้วมีบั๊ก วิธีย้อนที่ปลอดภัยที่สุดคืออะไร