#1 GitHub 101

ปัญหา
- การอัพเดตการแก้ไขงาน คล้ายๆตอนเราทำงานออกแบบแล้วเราเซฟไฟล์ไว้หลายเวอร์ชัน เราจำไม่ได้ว่าแต่ละเวอร์ชันเราแก้ไขไปบ้าง ในทำนองเดียวกับกาารแก้ไขโค้ดเมื่อเราทำการพัฒนาแก้ไขโค้ดจากจุดเดิมต่อไปเรื่อยแล้วดันเกิดข้อผิดพลาดอยากาย้อนกลับไปจุดก่อนหน้านี้ Git จะช่วยแก้ปัญหาเหล่านี้
Git ≠ GitHub
- Git คือ ระบบบันทึกประวัติของโปรเจกต์
- GitHub คือ บ้านออนไลน์ที่เอาโปรเจกต์ Git ไปเก็บ
Git ทำงานกับประวัติไฟล์ ส่วน GitHub เป็นบริการออนไลน์ที่ใช้เก็บและทำงานร่วมกับโปรเจกต์ Git

Git ทำการเก็บประวัติการกระทำ ช่วยเก็บประวัติว่าไฟล์เปลี่ยนอย่างไรในแต่ละช่วง
สมมติ เรามีไฟล์ เอกสาร.doc
เอกสาร.doc
10.00 → เพื่มรายการ
12.00 → เพิ่มราคา
13.00 → แก้แล้วพัง 💥
ส่วน GitHub คือสถานที่ออนไลน์ที่เราสามารถเอาโปรเจกต์ที่ใช้ Git ไปเก็บได้

📄 ไฟล์ .doc = งานของเรา
🕰️ Version History ของไฟล์ = Git
☁️ Google Drive ที่เอางานและประวัติไปเก็บออนไลน์ ≈ GitHub
ระหว่าง Git กับ GitHub ตัวไหนช่วยให้เรารู้ว่า “ก่อนพัง โค้ดหน้าตาเป็นยังไง”?
Repository (Repo) คือ ?
- Repository คือโปรเจกต์ทั้งก้อน
- Repository หรือเรียกสั้น ๆ ว่า Repo ไม่ได้มีแค่ไฟล์ในโฟลเดอร์ แต่ Git ยังจำ ประวัติการเปลี่ยนแปลงของโปรเจกต์นี้ ด้วย


Commit คือ ?
Commit จึงเหมือน จุดเซฟของโปรเจกต์ ณ ตอนนั้น


สมมติกำลังเขียนโค้ดทำระบบ:
09:00 ระบบส่ง Email ใช้งานได้
10:00 เพิ่ม AI ให้ระบบ
11:00 แก้โค้ดเพิ่ม
12:00 💥 ระบบพัง
จุดปลอดภัยที่สามารถย้อนกลับมาได้ คุณคิดว่าควร Commit ตอนไหน?
A) 09:00 ตอนระบบ Email ใช้งานได้
B) 12:00 หลังระบบพัง
C) ไม่ต้อง Commit จนกว่าโปรเจกต์ทั้งหมดจะเสร็จ
Commit ต่างจาก Save ยังไง ?
- Save = เซฟไฟล์ปัจจุบัน
💾 Save ( Ctrl + S ) ➜ ไฟล์ล่าสุดในคอมถูกบันทึก
- Commit = สร้างจุดในประวัติของโปรเจกต์
📄 main.js ➜ แก้โค้ด ➜ Ctrl + S ➜ 💾 ไฟล์ถูก Save ➜ Git Commit ➜ 📸 เก็บจุดสำคัญของโปรเจกต์ “ระบบส่ง Email ใช้งานได้”
บนระบบเราจะเห็นเป็น
● เพิ่มระบบส่ง Email
│
● เพิ่มระบบอ่าน Google Sheet
│
● สร้างโปรเจกต์ครั้งแรก
แต่ละ ● คือ Commit หนึ่งจุด


สรุปภาพรวม Git, GitHub, Repository, Commit
GitHabเปรียบเสมือนคลังเก็บ (Warehouse)ในการเก็บโปรเจกต์- 1 โปรเจกต์ คือ
1 Repository / 1 Repoเปรียบเสมือนกล่องเก็บของที่เก็บสิ่งของที่จำเป็นต่องานนั้นทั้งหมดของเราไว้ - ภายใน 1 โปรเจกต์ เราสามารถทำการเก็บประวัติ การแก้ไข/ปรับปรุง สิ่งที่ต่างๆที่เราทำกับโปรเจกต์ ซึ่งสิ่งนี้เรียกว่า
Gitในการเก็บประวัติเราในแต่ละจุดที่ต้องการ เราจะต้องทำการCommitโดยการ Commit จะเป็นระบุจุดเช็คการเปลี่ยนแปลงว่าแต่ละจุดเช็คเราทำการเปลี่ยนแปลงอะไรไปบ้างกับโปรเจกต์
