สอนใช้ Git ตอนที่ 2: Branching Out, Collaborate Without Chaos
Branch คือเครื่องมือที่ทำให้คุณทดลอง แก้ไข และทำงานร่วมกับคนอื่นได้โดยไม่ทำให้เส้นหลักพัง ตอนนี้จะพาไปรู้จัก branch, merge, remote, pull request และวิธีรับมือ merge conflict แบบไม่ตื่นตระหนก
บทความนี้เป็นตอนที่ 2 ของซีรีส์สอนใช้ Git ที่มีทั้งหมด 4 ตอน โดยตอนนี้จะต่อจากพื้นฐานในตอนแรกและพาไปสู่การใช้ branch, remote และ pull request เพื่อทำงานร่วมกันอย่างเป็นระบบ
หลังจาก Maya เริ่มใช้ Git กับไฟล์งานของตัวเองได้คล่องขึ้น ปัญหาใหม่ก็เริ่มมาแทนที่ปัญหาเดิม คราวนี้ไม่ใช่เรื่องไฟล์หาย แต่เป็นเรื่อง “จะทำหลายอย่างพร้อมกันโดยไม่ทำของเดิมพังได้อย่างไร”
ถ้าคุณเคยมีสถานการณ์แบบนี้ คุณจะเข้าใจทันที:
- อยากลองแก้เอกสารชุดใหม่ แต่ไม่อยากแตะเวอร์ชันที่ใช้อยู่
- อยากเพิ่ม feature แต่ยังมี bug เก่าที่ต้องแก้
- มีเพื่อนร่วมทีมเข้ามาช่วย แล้วไม่อยากให้ทุกคนแก้บนไฟล์เดียวกันแบบชนกันมั่วไปหมด
Git แก้ปัญหานี้ด้วยแนวคิดที่เรียกว่า branch หรือ “เส้นงานย่อย” ที่แยกออกจากเส้นหลักชั่วคราว
Branch คืออะไร แบบไม่ทำให้ปวดหัว
ถ้าให้ใช้ภาพง่ายที่สุด branch ก็คือ timeline คู่ขนาน
คุณยังมีงานหลักเส้นหนึ่งอยู่ เช่น main แต่สามารถแตกงานออกไปอีกเส้นเพื่อทดลอง แก้ feature หรือจัดการงานเฉพาะเรื่องได้ โดยไม่ต้องรบกวนเส้นหลักทันที
Git Book อธิบายว่าจุดแข็งของ Git คือ branching เบามากและเร็วมาก เพราะ branch ใน Git เป็นเพียง pointer หรือจุดชี้ไปยัง commit ล่าสุด ไม่ได้แปลว่าคุณต้องคัดลอกทั้งโปรเจกต์ใหม่ทุกครั้ง
นี่คือเหตุผลว่าทำไม Git ถึงเหมาะกับการทำ branch บ่อย ๆ มากกว่าที่หลายคนคิด
ถ้าจะให้จำแบบสั้นที่สุด branch มีประโยชน์เพราะมันทำให้คุณ “เลื่อนการตัดสินใจ” ได้ คุณยังไม่ต้องรวมทุกอย่างกลับเข้า main ทันที คุณสามารถแยกงาน, ทดลอง, และค่อยตัดสินว่าควร merge กลับเมื่อไร นี่คือสิ่งที่ทำให้การทำงานเป็นทีมปลอดภัยขึ้นมาก
มันยังช่วยเรื่องโฟกัสด้วย เพราะเมื่อหนึ่ง branch มีเป้าหมายชัด เช่น แก้ bug เดียวหรือปรับเอกสารชุดเดียว คุณจะไม่เผลอผสมหลายเรื่องเข้าด้วยกันง่ายเกินไป และพอเปิด PR คน review ก็จะอ่านง่ายขึ้นตามไปด้วย
ถ้าจะให้คิดแบบใช้งานจริง branch ที่ดีควรอธิบายตัวเองได้ในประโยคเดียว เช่น “แก้หน้า login”, “เพิ่ม release checklist” หรือ “ปรับ onboarding guide” ถ้าคุณอธิบาย branch ไม่ชัด นั่นมักเป็นสัญญาณว่างานใน branch ใหญ่เกินไป และจะเริ่มมีผลต่อการ review และ merge ตามมา
คำสั่งพื้นฐานของ branch ที่คุณควรรู้
เริ่มจากดูว่าใน repo ตอนนี้มี branch อะไรบ้าง
git branchถ้าอยากสร้าง branch ใหม่:
git branch feature-login-pageแต่ในทางปฏิบัติ ผมแนะนำให้ใช้ git switch -c มากกว่า เพราะมันสร้างและสลับไปที่ branch นั้นในคำสั่งเดียว
git switch -c feature-login-pageถ้าจะกลับไปที่ main:
git switch mainเมื่อทำงานเสร็จและอยากเอางานจาก branch ย่อยกลับมารวมกับ main:
git switch main
git merge feature-login-pageถ้าอยากดูความแตกต่างระหว่าง branch:
git diff main..feature-login-pageคำสั่งพวกนี้คือพื้นฐานของการแยกงานเป็นส่วน ๆ แบบไม่ทำให้เส้นหลักสั่นไปทุกครั้งที่คุณทดลองอะไรใหม่
ในทางปฏิบัติ ผมแนะนำให้ตั้งชื่อ branch ให้สื่อความหมายตั้งแต่แรก เช่น feature/login-page, docs/onboarding-update หรือ fix/payment-timeout เพราะ branch name ที่ดีช่วยให้ทั้งทีมเข้าใจงานโดยไม่ต้องเปิดเข้าไปดูทุกอย่างก่อน
อีกอย่างที่ช่วยได้มากคืออย่าเปิด branch ทิ้งไว้แบบไม่มีเจ้าของ ถ้าคุณสร้าง branch แล้วค้างไว้หลายสัปดาห์โดยไม่ชัดว่าจะกลับมาทำเมื่อไร มันจะเริ่มกลายเป็นขยะเชิงบริหารมากกว่าจะเป็นเส้นงานที่มีชีวิต
ผมยังแนะนำให้แยก branch ตามผลลัพธ์มากกว่าตามช่วงเวลา ชื่ออย่าง feature/april-work กว้างเกินไป แต่ docs/release-checklist-update บอกเป้าหมายชัดกว่า พอทีมมีหลาย branch พร้อมกัน ความชัดเจนเล็ก ๆ แบบนี้ช่วยลดภาระการสื่อสารได้มาก
Remote repository คืออะไร
ตอน Maya ทำงานคนเดียว local Git บนเครื่องก็เพียงพอ แต่พอมีเพื่อนร่วมทีมเข้ามา เธอต้องมีที่กลางให้ทุกคน push และ pull งานร่วมกัน ตรงนี้คือบทบาทของ remote repository
remote repository คือสำเนาของ repo ที่อยู่บนอีกเครื่องหนึ่ง อาจเป็น GitHub, GitLab, Gitea หรือ server ภายในของทีมก็ได้
คำสั่งพื้นฐานที่เกี่ยวข้องมีประมาณนี้:
git clone <repo-url>
git fetch
git pull
git pushgit clone คือดึง repo ทั้งก้อนมาลงเครื่อง git fetch คือดึงข้อมูลอัปเดตจาก remote ลงมา แต่ยังไม่รวมเข้ากับ branch ปัจจุบัน git pull คือ fetch แล้ว integrate เข้ากับ branch ปัจจุบัน git push คือส่งงานจาก local ขึ้น remote
จากเอกสาร git pull เอง Git อธิบายชัดว่า pull คือการ fetch ก่อน แล้วจึง integrate งานเข้ามาทีหลัง เพราะฉะนั้นถ้าคุณอยากคุมขั้นตอนให้ละเอียดขึ้น บางครั้ง fetch แยกก่อนก็ช่วยให้เห็นภาพชัดกว่า
นี่เป็นจุดที่คนเริ่มต้นควรรู้ไว้ เพราะบางครั้งเวลาเกิดปัญหา ทีมจะโทษ pull ว่า “ทำให้ของพัง” ทั้งที่จริงมันแค่รวมข้อมูลเข้ามาตามกติกาเดิมของ branch ถ้าคุณยังไม่มั่นใจ การ fetch ก่อนแล้วค่อยดูสถานะ branch จะช่วยลดความสับสนได้มาก
ถ้าคุณกำลังกลับมาทำ branch ที่ค้างไว้นาน การ git fetch ก่อนแล้วดูว่าฝั่ง remote เปลี่ยนอะไรไปบ้างมักช่วยให้ตัดสินใจได้ดีขึ้นว่าจะรวมงานกลับแบบไหน อย่างน้อยมันทำให้คุณไม่ดึงทุกอย่างเข้ามาโดยยังไม่เข้าใจบริบทของการเปลี่ยนแปลงล่าสุด
สำหรับมือใหม่ ผมมักอธิบายต่างกันแบบนี้:
fetchเหมือนเดินไปดูว่ามีอะไรใหม่ที่ serverpullเหมือนเอาของใหม่กลับมารวมกับโต๊ะทำงานของคุณเลย
ถ้าคุณยังไม่คุ้นกับการรวมงาน การใช้ fetch ให้เป็นก่อนจะช่วยให้มองภาพ remote ได้ชัดขึ้น

Pull Request คืออะไร และทำไมทีมเล็กก็ควรใช้
เมื่อ Maya กับเพื่อนร่วมทีมเริ่มทำงานร่วมกันบน remote เดียวกัน คำถามถัดมาคือ “จะ merge งานกลับเข้า main อย่างไรให้ปลอดภัย”
คำตอบที่นิยมที่สุดคือ Pull Request หรือ PR
PR ไม่ใช่แค่ปุ่มหนึ่งบน GitHub หรือ Gitea แต่มันคือกระบวนการ review ก่อนเอางานเข้ากลาง
ประโยชน์ของ PR มีหลายข้อ:
- ทำให้คนอื่นเห็นว่าคุณเปลี่ยนอะไร
- เปิดพื้นที่ให้ review ก่อน merge
- ลดโอกาสที่
mainจะพังจากการ merge งานที่ยังไม่พร้อม - เก็บประวัติการตัดสินใจของทีมไว้ในที่เดียว
แม้ทีมจะมีแค่ 2 คน ผมก็ยังมองว่า PR มีประโยชน์ เพราะมันสร้าง “จังหวะหยุดดู” ก่อนเอางานเข้าจริง และหลายครั้งแค่ได้อ่าน diff ของตัวเองผ่าน PR คุณก็เจอข้อผิดพลาดเพิ่มแล้ว
อีกอย่างที่หลายทีมได้จาก PR คือภาษากลางในการคุยกัน เช่น งานนี้พร้อม merge หรือยัง, มี feedback อะไรค้าง, ต้องแก้อะไรก่อนบ้าง พอทุกอย่างถูกร้อยอยู่ในที่เดียว การสื่อสารจะไม่ต้องกระจายไปตามแชตหรือคำบอกเล่าที่ตามย้อนหลังยาก
นี่สำคัญมากเมื่อทีมเริ่มมีทั้งคนเขียนโค้ดและคนดูเอกสาร เพราะ PR ทำให้มาตรฐานการทบทวนเริ่มมีหน้าตาเดียวกัน ไม่ว่าไฟล์จะเป็น app.js หรือ onboarding.md
อีกเหตุผลที่ PR สำคัญคือมันสร้างจังหวะให้ถามคำถามที่ปกติอาจไม่มีใครถาม เช่น diff นี้ใหญ่เกินไปไหม ควรแยกเป็นสอง PR หรือเปล่า หรือข้อความอธิบายยังช่วยคน review พอหรือยัง พอทีมทำแบบนี้ต่อเนื่อง PR จะไม่ใช่แค่ประตูเข้า main แต่เป็นพื้นที่ยกระดับคุณภาพงานด้วย
ตัวอย่างจริง: สองคนช่วยกันเขียนเอกสาร
ลองนึกภาพว่า Maya กับเพื่อนกำลังช่วยกันทำ product wiki
Maya แก้หน้า onboarding ส่วนเพื่อนแก้หน้า release checklist ถ้าทั้งคู่แก้บน main ตรง ๆ พร้อมกัน โอกาสชนกันสูงมาก และถ้ามีใครพลาด ก็ลากเส้นหลักให้รวนได้ทันที
แต่ถ้าใช้ branch:
git switch -c docs-onboarding-update
git switch -c docs-release-checklistแต่ละคนก็ทำงานของตัวเองไป แล้วค่อย push ขึ้น remote เปิด PR และ review กันก่อน merge แบบนี้เส้นหลักจะยังคงนิ่งกว่า และทุกคนมีภาพชัดว่าอะไรยังอยู่ระหว่าง review อะไร merge แล้ว
Merge conflict ไม่ได้น่ากลัวอย่างที่คิด
คำว่า merge conflict มักทำให้มือใหม่ตกใจ แต่ถ้าอธิบายแบบตรงไปตรงมา มันแค่หมายถึง Git เจอสองชุดการแก้ไขที่เอามารวมกันแล้วไม่แน่ใจว่าควรเลือกแบบไหน
เช่น Maya กับเพื่อนแก้บรรทัดเดียวกันในไฟล์เดียวกัน Git ไม่ควรเดาแทน เพราะเดาผิดแล้วเนื้อหาจะเพี้ยน มันจึงหยุดและขอให้มนุษย์ตัดสินใจ
สิ่งที่ควรทำเวลาเจอ conflict คือ:
- อย่าเพิ่งตกใจ
- เปิดไฟล์ที่มี conflict
- อ่านว่าฝั่งไหนเปลี่ยนอะไร
- รวมออกมาให้ได้เนื้อหาสุดท้ายที่ถูกต้อง
- add และ commit ใหม่
merge conflict ไม่ได้แปลว่า repo พัง แต่มันแปลว่า “ถึงเวลาที่คุณต้องช่วย Git ตัดสินใจ”
ถ้าจะให้สบายขึ้นอีกขั้น เวลาทำงานร่วมกันคุณควร pull หรือ fetch งานล่าสุดสม่ำเสมอ อย่าปล่อยให้ branch ของตัวเองค้างนานเกินไป เพราะ branch ที่ยิ่งอยู่นานโดยไม่ sync กับโลกจริง โอกาส conflict ก็มักยิ่งสูง
นี่คือเหตุผลว่าทำไม branch ขนาดเล็กและอายุสั้นมักดีกว่า branch ก้อนใหญ่และค้างนาน เพราะยิ่งงานเล็กและ merge เร็ว การ review, test และ resolve conflict ก็จะเบาลงทั้งหมด
ถ้าทีมยังใหม่กับ Git มาก ผมแนะนำให้เริ่มจากกติกาง่าย ๆ ว่า branch หนึ่งควรแก้เรื่องเดียว และควรพยายาม merge ให้เร็วที่สุดเท่าที่บริบทเอื้อ กติกาเรียบ ๆ แบบนี้ช่วยได้จริงกว่าการมี process ยาวมากแต่ไม่มีใครทำตามครบ
ความผิดพลาดที่เจอบ่อย: merge เข้า main ตรง ๆ
หนึ่งใน pitfall ที่เจอบ่อยมากคือทีมเล็กคิดว่า “มีแค่สองคนเอง น่าจะ merge เข้า main ตรง ๆ ได้” ซึ่งบางครั้งก็ทำได้ แต่ปัญหาคือมันทำให้ไม่มี quality gate
ถ้าคุณมีวินัยสูงมากและงานเล็กมาก อาจไม่พังทันที แต่พอโปรเจกต์เริ่มโต คุณจะอยากได้ระบบที่ทำให้ main สะอาดและเชื่อถือได้เสมอ
นี่คือเหตุผลว่าทำไม PR ถึงมีประโยชน์แม้ทีมเล็ก เพราะมันไม่ได้มีไว้เพิ่มพิธีการ แต่มันมีไว้สร้างความนิ่งให้เส้นหลัก
ถ้าทีมของคุณยังเล็กมากจนไม่อยากเพิ่มขั้นตอนเยอะ ผมยังแนะนำให้มีอย่างน้อยสองกติกา:
- อย่า merge งานที่ตัวเองยังไม่ได้อ่าน diff อีกรอบ
- อย่าใช้
mainเป็นที่ทดลอง
แค่สองข้อก็ช่วยลดปัญหาได้มากแล้ว
และถ้าจะเพิ่มอีกข้อ ผมจะเพิ่มเรื่องนี้: ก่อน merge ให้ถามว่า “ถ้าฉันเป็นคนอื่นในทีม ฉันจะอ่าน branch นี้รู้เรื่องไหม” เพราะการตั้งชื่อ, ขนาดของ change และคำอธิบายใน PR ล้วนมีผลกับคุณภาพของการร่วมงาน
ท้ายที่สุด branch ไม่ได้มีไว้ทำให้ Git ดูซับซ้อน แต่มันมีไว้ปกป้องเส้นหลักและปกป้องสมาธิของทีม ถ้าคุณเริ่มรู้สึกว่างานชนกันบ่อย review ยาก หรือ conflict ถี่ขึ้นผิดปกติ ปัญหามักไม่ได้อยู่ที่คำสั่ง แต่อยู่ที่ขนาดและอายุของ branch ยังไม่พอดีกับจังหวะการทำงานจริง
สรุปสั้น ๆ ก่อนจบตอนนี้
- Branch คือเส้นงานคู่ขนานที่ช่วยให้คุณทดลองและทำงานร่วมกันได้โดยไม่ทำเส้นหลักพัง
- Remote repository คือสำเนาของ repo บนอีกเครื่อง เช่น GitHub หรือ Gitea
- Pull Request คือจังหวะ review ก่อน merge ที่ช่วยให้ทีมทำงานปลอดภัยขึ้น
ตอนแรก Maya แค่ไม่อยากทำไฟล์หาย ตอนนี้เธอเริ่มเห็นแล้วว่า Git ไม่ได้ช่วยแค่ย้อนเวลา แต่มันช่วยจัดระเบียบการทำงานร่วมกันด้วย
ถ้าจะสรุปให้สั้นที่สุด branch ช่วยให้ทีมไม่ต้องเอาการทดลองทุกอย่างไปเสี่ยงบนเส้นหลัก และ PR ช่วยให้การรวมงานกลับเข้ามาเป็นการตัดสินใจที่มองเห็นได้ ไม่ใช่การเดาใจกันผ่านแชตหรือความจำล้วน ๆ ยิ่งทีมเริ่มมีทั้ง code, docs และงาน operational ปนกัน ความชัดเจนแบบนี้ยิ่งมีมูลค่า
ผมอยากให้คุณลองเริ่มจากกติกาง่าย ๆ หลังอ่านตอนนี้จบ เช่น สร้าง branch ต่อหนึ่งงาน, ตั้งชื่อให้สื่อเป้าหมาย, เปิด PR ก่อน merge และอย่าปล่อย branch ค้างนานเกินไป แค่ทำสี่ข้อให้ได้สม่ำเสมอ คุณก็จะเห็นคุณค่าของการร่วมงานบน Git ชัดขึ้นมากกว่าการจำคำสั่งเพิ่มอีกสิบคำสั่งเสียอีก
ถ้าทีมของคุณยังมีคนไม่มาก อย่าพยายามทำให้ขั้นตอนดูใหญ่เกินจำเป็น เริ่มจาก branch สั้น ๆ และ PR ที่อ่านได้ก่อน แล้วค่อยเพิ่มกติกาเมื่อปัญหาจริงเริ่มชัด แบบนี้ทีมจะรับ Git เข้าไปเป็นนิสัยได้ง่ายกว่า
และถ้าคุณกำลังทำงานคนเดียวอยู่ branch ก็ยังมีประโยชน์ เพราะมันช่วยให้คุณทดลองของใหม่ได้โดยไม่ทำลายเส้นหลักของตัวเอง พอวันหนึ่งต้องทำงานร่วมกับคนอื่น คุณจะมีพื้นฐานนี้ติดตัวอยู่แล้ว
พูดอีกแบบคือ branch ที่ดีไม่ใช่ภาระเพิ่ม แต่เป็นวิธีทำให้งานทดลองกับงานจริงอยู่ร่วมกันได้อย่างมีระเบียบมากขึ้น
เมื่อทีมเริ่มเห็นประโยชน์นี้ร่วมกัน การร่วมงานจะลื่นขึ้นอย่างชัดเจนมาก
ยิ่ง branch ชัด PR เล็ก และ review สม่ำเสมอ ทีมยิ่งนิ่ง
และเส้นหลักก็จะเชื่อถือได้มากขึ้นในทุกสัปดาห์ของการทำงาน
นี่คือฐานสำคัญของการ collaborate แบบไม่วุ่นและไม่เดางานกันไปมา
เมื่อทีมเริ่มซ้อมจังหวะนี้จนคุ้น การทำงานร่วมกันจะไม่ต้องพึ่งความจำหรือการตามแชตย้อนหลังมากเหมือนเดิม และนั่นช่วยประหยัดพลังของทีมได้อย่างมากในระยะยาว
ชัด เร็ว ปลอดภัย และอ่านย้อนหลังได้ คือประโยชน์หลักของแนวทางนี้
ในตอนถัดไป เราจะขยับจาก “ใช้ branch ได้” ไปสู่ “ออกแบบ workflow ของทีมอย่างไรให้เหมาะกับขนาดงาน” เพราะ branch อย่างเดียวอาจยังไม่พอ ถ้าทีมเริ่มโตและงานเริ่มมี release cycle จริงจัง
ตอนที่ 1 Track Everything, Fear Nothing
ตอนที่ 3 Workflows for Teams & Projects
ตอนที่ 4 Self-Hosted CI/CD with Gitea