Git คืออะไร
เคยไหม พอทำโปรเจกต์ใกล้เสร็จแล้วกลัวพัง เลยก๊อปทั้งโฟลเดอร์เก็บไว้ ตั้งชื่อว่า project-backup พอแก้ต่อก็ก๊อปอีก กลายเป็น project-final, project-final-2, project-final-แก้ล่าสุด-จริงๆ สุดท้ายก็จำไม่ได้ว่าอันไหนใหม่สุด แล้วอันไหนมีโค้ดที่ลบทิ้งไปแล้วอยากได้กลับมา
หรือทำงานกับเพื่อน ต่างคนต่างแก้ไฟล์เดียวกัน พอเอามารวมกันก็ต้องมานั่งไล่ทีละบรรทัดว่าใครแก้อะไร
Git เกิดมาเพื่อแก้ปัญหาพวกนี้ทั้งหมด
Git คืออะไร
Git คือ ระบบควบคุมเวอร์ชัน (version control system — ย่อว่า VCS) พูดง่าย ๆ คือโปรแกรมที่คอยจำว่าโปรเจกต์ของคุณ หน้าตาเป็นยังไงในแต่ละช่วงเวลา
ทุกครั้งที่คุณแก้งานเสร็จก้อนหนึ่ง คุณจะบอก Git ว่า “จำภาพตอนนี้ไว้นะ” Git ก็จะถ่ายรูปโปรเจกต์ทั้งโฟลเดอร์เก็บไว้ พร้อมโน้ตสั้น ๆ ว่าคุณทำอะไร ใครทำ ทำเมื่อไหร่ ภาพที่ถ่ายไว้แต่ละครั้งเรียกว่า commit
พอสะสม commit ไปเรื่อย ๆ คุณก็จะได้ไทม์ไลน์ของโปรเจกต์ ที่ทำสิ่งเหล่านี้ได้
- ย้อนเวลา กลับไปดู หรือกลับไปใช้โค้ดเวอร์ชันไหนก็ได้ที่เคย commit ไว้
- เทียบ ว่าระหว่างสองจุดเวลา มีอะไรเปลี่ยนไปบ้าง เพิ่มบรรทัดไหน ลบบรรทัดไหน
- แตกสายทดลอง อยากลองฟีเจอร์ใหม่แบบเสี่ยง ๆ ก็แตกสายออกไปทำ ถ้าไม่เวิร์กก็ทิ้งสายนั้น โค้ดหลักไม่กระทบ
- ทำงานหลายคน ต่างคนต่างแก้ แล้ว Git ช่วยรวมงานเข้าด้วยกัน บอกได้ว่าใครแก้บรรทัดไหน
สำคัญ: Git ไม่ได้เก็บแค่ “ส่วนที่ต่าง” ของแต่ละไฟล์แบบที่หลายคนเข้าใจ แต่ในทางความคิด มันเก็บ ภาพรวมของทั้งโปรเจกต์ (snapshot) ในแต่ละ commit จำประโยคนี้ไว้ เดี๋ยวบทหลัง ๆ จะเข้าใจ Git ง่ายขึ้นเยอะ
Git กับ GitHub ไม่ใช่สิ่งเดียวกัน
มือใหม่สับสนเรื่องนี้กันมาก แยกให้ชัดตั้งแต่ตอนนี้
| Git | GitHub | |
|---|---|---|
| มันคืออะไร | โปรแกรมที่ติดตั้งในเครื่องคุณ | เว็บไซต์ / บริการออนไลน์ |
| ทำอะไร | จำประวัติโปรเจกต์ในเครื่องคุณ | เก็บสำเนาโปรเจกต์ไว้บนคลาวด์ ให้แชร์กับคนอื่น |
| ต้องมีเน็ตไหม | ไม่ต้อง ทำงานออฟไลน์ได้หมด | ต้อง เพราะเป็นเว็บ |
| ใครทำ | Linus Torvalds (คนสร้าง Linux) ปี 2005 | บริษัท (ตอนนี้เป็นของ Microsoft) |
| มีเจ้าอื่นไหม | Git มีแค่ Git | มี GitLab, Bitbucket, Gitea ที่ทำงานคล้ายกัน |
เปรียบเทียบ: Git เหมือนกล้องถ่ายรูป ที่คุณใช้ถ่ายเก็บประวัติโปรเจกต์ ส่วน GitHub เหมือนอัลบั้มออนไลน์ ที่คุณอัปรูปขึ้นไปเก็บและแชร์ให้คนอื่นดู
คุณใช้ Git คนเดียวในเครื่องโดยไม่มี GitHub เลยก็ได้ แต่พอต้องแชร์งานหรือทำงานเป็นทีม การมีที่เก็บกลางบนคลาวด์อย่าง GitHub จะสะดวกมาก บทที่ 20–25 จะพูดเรื่องนี้ละเอียด
“distributed” แปลว่าอะไร
คุณจะได้ยินคำว่า Git เป็น distributed version control (ระบบควบคุมเวอร์ชันแบบกระจาย) มันต่างจากระบบรุ่นเก่า (แบบ centralized เช่น SVN) ตรงนี้
- ระบบเก่า: ประวัติทั้งหมดอยู่ที่เซิร์ฟเวอร์กลางที่เดียว เครื่องคุณมีแค่ไฟล์เวอร์ชันปัจจุบัน จะดูประวัติหรือ commit ต้องต่อเซิร์ฟเวอร์
- Git: เวลาคุณ
clone(ดาวน์โหลด) โปรเจกต์มา คุณได้ ประวัติทั้งหมดตั้งแต่ commit แรก มาไว้ในเครื่อง ทุกเครื่องที่ clone ไปมีสำเนาประวัติครบ
ผลคือ คุณ commit, ดูประวัติ, แตก branch, ย้อนเวลา ได้หมดโดยไม่ต้องมีเน็ต และถ้าเซิร์ฟเวอร์กลางพัง ประวัติก็ยังอยู่ครบในเครื่องของทุกคนที่เคย clone
Git เหมาะกับไฟล์แบบไหน
Git ออกแบบมาสำหรับ ไฟล์ข้อความ เป็นหลัก — โค้ดโปรแกรม, ไฟล์ตั้งค่า, ไฟล์ Markdown, HTML, CSS, SQL พวกนี้ Git จัดการได้ดีมาก เทียบความต่างทีละบรรทัดได้ รวมงานหลายคนได้
ส่วนไฟล์ที่ Git ไม่ค่อยเหมาะ
- ไฟล์ binary ขนาดใหญ่ที่เปลี่ยนบ่อย เช่น วิดีโอ, ไฟล์ .psd, ไฟล์เกม — Git เก็บได้แต่ repo จะบวมเร็ว เพราะเทียบความต่างไม่ได้ ต้องเก็บทั้งไฟล์ใหม่ทุกเวอร์ชัน (มีเครื่องมือเสริมชื่อ Git LFS ช่วยได้ พูดถึงในบทที่ 27)
- ไฟล์ที่สร้างขึ้นใหม่ได้เสมอ เช่น โฟลเดอร์
node_modules/, ไฟล์ที่ compile ออกมา — พวกนี้ไม่ควรเก็บ เดี๋ยวบทที่ 5 (.gitignore) จะบอกวิธีสั่งให้ Git มองข้าม
ภาพรวมสิ่งที่จะได้เรียนในซีรีส์นี้
- เฟส 1–2: commit, ดูประวัติ, ย้อนกลับ, จัดการไฟล์ — ทักษะที่ใช้ทุกวันแม้ทำงานคนเดียว
- เฟส 3: branch และการรวมงาน (merge, rebase) — หัวใจของการใช้ Git ให้เป็น
- เฟส 4: ทำงานกับ GitHub และทำงานเป็นทีมด้วย Pull Request
- เฟส 5: เครื่องมือขุดหาปัญหาและกู้คืน (reflog, bisect, blame)
- เฟส 6: workflow ของทีม, การปรับแต่ง, และหัวข้อขั้นสูง
ทุกบทมีตัวอย่างให้พิมพ์ตามได้จริง ไม่ต้องท่องคำสั่ง ขอแค่เข้าใจว่า Git เก็บอะไรไว้ตรงไหน แล้วคำสั่งจะตามมาเอง
เรื่องที่คนมักพลาด
- คิดว่า Git คือ GitHub — Git ทำงานในเครื่องคุณ ไม่ต้องมีบัญชี GitHub ก็เริ่มใช้ได้เลยวันนี้
- คิดว่า Git เก็บแค่ diff — ในทางความคิด แต่ละ commit คือ snapshot ของทั้งโปรเจกต์ ทำให้ checkout ย้อนเวลาได้ทันทีโดยไม่ต้อง “เล่น diff ย้อนกลับ”
- เอาไฟล์ลับขึ้น Git — รหัสผ่าน, API key, ไฟล์
.envห้ามใส่ เพราะประวัติ Git ลบยากมาก (บทที่ 31) และถ้า push ขึ้นคลาวด์แล้วถือว่ารั่วถาวร - รอจนโปรเจกต์ใหญ่แล้วค่อยเริ่มใช้ Git — ยิ่งเริ่มเร็วยิ่งดี commit แรกควรเกิดตั้งแต่โปรเจกต์ยังเป็นโครงเปล่า ๆ
สรุป
- Git = ระบบควบคุมเวอร์ชัน จำภาพรวมของโปรเจกต์ (snapshot) ในแต่ละช่วงเวลาที่เรียกว่า commit
- ใช้ย้อนเวลา เทียบความต่าง แตกสายทดลอง และทำงานหลายคนได้
- Git ≠ GitHub — Git อยู่ในเครื่องคุณ GitHub คือที่เก็บออนไลน์ (มีเจ้าอื่นเช่น GitLab, Bitbucket)
- Git เป็น distributed VCS — clone แล้วได้ประวัติทั้งหมดมาไว้ในเครื่อง ทำงานออฟไลน์ได้
- เหมาะกับไฟล์ข้อความ/โค้ด ไม่เหมาะกับ binary ใหญ่ ๆ และไฟล์ที่สร้างใหม่ได้
บทถัดไปเราจะติดตั้ง Git และตั้งค่าครั้งแรกให้เรียบร้อย เพื่อพร้อมสร้าง repository แรกในบทที่ 4