เกี่ยวกับ Git Workflow นั้นให้มองภาพการพัฒนาซอฟต์แวร์ที่มีนักพัฒนาหลายคนร่วมในโครงการ การพัฒนาฟีเจอร์ การ release version ใหม่ การแก้ bug ซึ่ง git workflow ก็คือการนำสิ่งเหล่านั้นมาพัฒนาในรูปแบบของ workflow โดยใช้ git ช่วยในการพัฒนา
ยกตัวอย่างการพัฒนาซอฟต์แวร์ตามผังการพัฒนาในรูปตัวอย่างด้านล่าง
เริ่มต้นโดยนักพัฒนาชื่อ Manee ได้ทำการสร้าง branch แยกออกจาก master branch ตั้งชื่อว่า develop ด้วยคำสั่ง
$ git branch develop
จากนั้นทำการ push ข้อมูลดังกล่าวไปเก็บไว้บน remote repository ที่เตรียมไว้ด้วยคำสั่ง
$ git push -u origin develop
นักพัฒนาอีกท่านหนึ่งชื่อ Chujai เข้ามาพัฒนาร่วมกันในโครงการดังกล่าว โดยทำการ clone remote repository นี้ ด้วยคำสั่ง
$ git clone <remote repository ที่ต้องการ>
Chujai ได้เริ่มพัฒนา โดยพัฒนาภายใต้ branch ที่สร้างขึ้น การพัฒนาโดยแยก branch ออกมาจาก master เพื่อป้องกันปัญหาหลายๆ อย่างที่อาจจะเกิดขึ้น หากนักพัฒนาทุกคนพยายาม push ข้อมูลทุกอย่างลงไปใน master branch
Chujai ต้องการพัฒนาฟีเจอร์เพิ่มเติมเพื่อใส่เข้าไปในซอฟต์แวร์ที่กำลังพัฒนาอยู่นี้ โดยทำการสร้าง feature branch ขึ้นมา ในที่ตั้งชื่อ branch ว่า featureA
เมื่อ Chujai พัฒนาซอร์สโค้ดบน branch featureA ใน local repository เสร็จเรียบร้อย ก็ใช้คำสั่ง git commit
ก่อนที่ Chujai จะ featureA branch ของตนไปรวมกับ develop branch อาจจะเป็นไปได้ว่ามีนักพัฒนาท่านอื่น ได้อัปเดทข้อมูลบน develop branch ไปก่อนแล้ว เพื่อความปลอดภัย Chujai จึงใช้คำสั่ง git pull
เพื่อดึงข้อมูลอัปเดทของ develop branch ก่อน
$ git pull origin develop
จากนั้นรวมซอร์สโค้ดบน featureA branch เข้ากับ develop branch โดยเริ่มจาก switch ไปยัง develop branch ก่อน ด้วยคำสั่ง
$ git checkout develop
แล้วจึงรวม featureA branch เข้าด้วยกันด้วยคำสั่ง
$ git merge featureA
สุดท้ายจึงใช้คำสั่ง push ไปยัง remote repository
และเมื่อรวม branch เสร็จเรียบร้อยแล้ว ก็ให้ใช้คำสั่งลบ featureA branch ที่ Chujai สร้างขึ้น เพราะไม่มีความจำเป็นต้องใช้งานอีกต่อไป
$ git branch -d featureA
กรณีเดียวกันกับนักพัฒนาในโครงการนี้อีกท่านหนึ่ง ที่มีการพัฒนาฟีเจอร์บนซอฟต์แวร์ตัวนี้เช่นกัน โดยทำการแตก branch แล้วตั้งชื่อ branch ว่า featureB
นักพัฒนาชื่อว่า Manee ได้พัฒนาฟีเจอร์ของตนลงไปใน featureB branch ที่ตนสร้างขึ้นใน local repository เช่นเดียวกับที่ Chujai พัฒนา featureA
และก็เช่นเดียวกัน ก่อนที่จะรวมซอร์สโค้ดของตนเข้ากับ develop branch เพื่อความปลอดภัย Manee จึงใช้คำสั่ง git pull
เพื่อดึงข้อมูลที่อาจจะมีการอัปเดทเข้ามาก่อน
จากนั้น Manee จึงใช้คำสั่ง git merge
เพื่อรวมซอร์สเข้ากับ develop branch เช่นเดียวกับที่ Chujai พัฒนา featureA
$ git merge featureB
สุดท้ายจึง push ขึ้นไปยัง remote repository ด้วยคำสั่ง git push
แล้วจึงลบ featureB branch เมื่อขั้นตอนทั้งหมดเสร็จสิ้น
$ git branch -d featureB
กรณีถัดมา คือการ release version ในที่นี้หลังจากพัฒนา featureA และ featureB และรวมซอร์สเรียบร้อยแล้ว Manee ต้องการ release เวอร์ชันของซอฟต์แวร์ที่พัฒนานี้ออกไป จึงทำการสร้าง branch ออกมาก่อน ดังแผนภาพด้านล่าง
$ git checkout -b release-0.1 develop
จากนั้น switch ไปยัง master branch แล้วใช้คำสั่ง git merge
เพื่อนำ featureA และ featureB ไปรวมกับ master branch ในลักษณะการ release version
ในการ release version นี้ ควรจะกำหนดใน develop branch ด้วย โดยใช้คำสั่ง git merge
กับ develop branch เช่นเดียวกัน
กำหนด tag ด้วยคำสั่ง
$ git tag -a 0.1 -m <massage>
แล้วจึงใช้คำสั่ง push ไปยัง remote repository เป็นขั้นตอนสุดท้าย
$ git push --tags
กรณีสุดท้าย เป็นตัวอย่างของการแก้ปัญหา bug ที่อาจจะมีการแจ้งปัญหาจากทางผู้ใช้งาน เช่นเดียวกันกับกรณีที่กล่าวมา โดยเริ่มจากการแยก branch ในที่นี้ตั้งชื่อว่า issue-001 เพื่อแก้ bug ที่ได้รับรายงานมา
หลังจากที่ดำเนินการแก้ปัญหาดังกล่าวภายใต้ issue-001 branch เรียบร้อยแล้ว จึงใช้คำสั่ง git merge
เพื่อรวมเข้ากับ master branch
จากนั้นจึง merge เข้ากับ develop branch อีกครั้ง
การทำ git workflow สำหรับ fixed bug อธิบายเป็นภาพได้ดังรูปด้านล่าง