Git และ GitHub: ต่างกันอย่างไร และเชื่อมโยงกันอย่างไร
Git คือโปรแกรมควบคุมเวอร์ชันที่ทำงานบนคอมพิวเตอร์ของคุณ และเก็บประวัติการเปลี่ยนแปลงของโปรเจกต์ GitHub คือบริการบนคลาวด์ที่เก็บรีโพซิทอรี Git พร้อมเครื่องมือทำงานเป็นทีม ได้แก่ pull request การรีวิวโค้ด งาน และ CI ใช้ Git ได้โดยไม่ต้องใช้ GitHub แต่ใช้ GitHub โดยไม่มี Git ไม่ได้
Git และ GitHub มักถูกสับสนกัน ทั้งที่อยู่คนละระดับ Git คือโปรแกรมควบคุมเวอร์ชันที่คุณติดตั้งบนคอมพิวเตอร์ มันจดจำทุกสถานะของโปรเจกต์ที่คุณบันทึกไว้และช่วยให้กลับไปยังสถานะนั้นได้ GitHub คือเว็บเซอร์วิสที่เก็บสำเนาของรีโพซิทอรี Git และมีเครื่องมือสำหรับทำงานเป็นทีมรอบ ๆ วิธีจำที่ง่ายที่สุดคือ Git คือเครื่องยนต์ และ GitHub คืออู่บนคลาวด์ที่คุณเอาเครื่องยนต์นั้นไปติดตั้ง
Git คืออะไร
Git คือระบบควบคุมเวอร์ชันแบบกระจาย Linus Torvalds สร้างขึ้นในปี 2005 เพื่อพัฒนาเคอร์เนล Linux และตั้งแต่นั้นมาก็กลายเป็นมาตรฐานของวงการ Git ทำงานบนเครื่องของคุณทั้งหมด ประวัติการเปลี่ยนแปลงเก็บอยู่ในโฟลเดอร์ซ่อน .git ภายในโปรเจกต์ และการดำเนินการส่วนใหญ่ไม่ต้องใช้อินเทอร์เน็ต
คำว่า "กระจาย" สำคัญมาก ผู้ร่วมงานทุกคนในโปรเจกต์มีสำเนารีโพซิทอรีเต็มพร้อมประวัติทั้งหมดในเครื่อง ไม่ใช่แค่ไฟล์ล่าสุด หากเซิร์ฟเวอร์หายไป โปรเจกต์กู้คืนได้จากเครื่องทำงานเครื่องใดก็ได้
สิ่งที่ Git ทำได้ด้วยตัวเอง:
- บันทึกการเปลี่ยนแปลงเป็นคอมมิต ซึ่งเป็นสแนปชอตของโปรเจกต์พร้อมผู้เขียน วันที่ และคำอธิบาย
- แสดงว่าใคร เมื่อไร และทำไมจึงเปลี่ยนบรรทัดหนึ่ง (
git log,git blame) - พัฒนาหลายสายงานคู่ขนานในบรานช์และ merge เข้าด้วยกัน
- ย้อนกลับข้อผิดพลาดโดยไม่สูญเสียงานอื่น
- แลกเปลี่ยนประวัติกับรีโพซิทอรีอื่นด้วย
git push,git pullและgit fetch
Git เป็นยูทิลิตีบรรทัดคำสั่ง โปรแกรมกราฟิกและแผงในเอดิเตอร์ (VS Code, IntelliJ IDEA) เป็นเพียงหน้าตาที่ครอบคำสั่งเดียวกัน
GitHub คืออะไร
GitHub คือแพลตฟอร์มคลาวด์สำหรับโฮสต์รีโพซิทอรี Git ปัจจุบันเป็นของ Microsoft คุณสร้างรีโพซิทอรีบนนั้น ส่งโค้ดในเครื่องขึ้นด้วย git push และโค้ดจะเข้าถึงได้สำหรับเพื่อนร่วมทีม นายจ้าง หรือทั้งอินเทอร์เน็ตหากรีโพซิทอรีเป็นสาธารณะ
แต่คุณค่าของ GitHub ไม่ได้อยู่ที่การเก็บข้อมูลเพียงอย่างเดียว รอบรีโพซิทอรี GitHub เพิ่มสิ่งที่ไม่มีใน Git เอง:
- Pull request คำขอ merge บรานช์ พร้อมการอภิปรายและรีวิวโค้ดทีละบรรทัด
- Issues งานและรายงานบั๊กที่ผูกกับโปรเจกต์
- GitHub Actions CI/CD: รันเทสต์ บิลด์ และดีพลอยอัตโนมัติทุกครั้งที่ push
- การจัดการสิทธิ์ ใครอ่าน เขียน หรือ merge เข้าบรานช์ที่ป้องกันไว้ได้
- โปรไฟล์นักพัฒนา กราฟกิจกรรมและโปรเจกต์สาธารณะที่ผู้จัดหาพนักงานดู
- GitHub Pages โฮสต์เว็บไซต์สถิตฟรีจากรีโพซิทอรีโดยตรง
คำค้นอย่าง "github คืออะไร" หรือ "git hub" มักหมายถึงเว็บเซอร์วิสนี้ ซึ่งมีที่อยู่ github.com เว็บไซต์ทางการของ Git คือ git-scm.com ซึ่งใช้ดาวน์โหลดตัวติดตั้ง
ตารางเปรียบเทียบ Git และ GitHub
| เกณฑ์ | Git | GitHub |
|---|---|---|
| คืออะไร | โปรแกรมควบคุมเวอร์ชัน | เว็บเซอร์วิสสำหรับโฮสต์รีโพซิทอรี |
| ทำงานที่ไหน | บนคอมพิวเตอร์ของคุณ | บนคลาวด์ ผ่านเบราว์เซอร์และ API |
| ต้องใช้อินเทอร์เน็ตหรือไม่ | ไม่ ยกเว้นการแลกเปลี่ยนกับรีโมต | ใช่ |
| ลิขสิทธิ์ | โอเพนซอร์ส (GPLv2) ฟรี | บริการเชิงพาณิชย์ มีแพ็กเกจฟรีและแบบเสียเงิน |
| อินเทอร์เฟซ | บรรทัดคำสั่ง ไคลเอนต์ GUI | เว็บไซต์ แอป GitHub Desktop และ CLI gh |
| งานหลัก | ประวัติเวอร์ชัน บรานช์ การ merge | การทำงานร่วมกัน การรีวิว CI การเผยแพร่โค้ด |
| ใช้อย่างใดอย่างหนึ่งได้หรือไม่ | ได้ เต็มรูปแบบ | ไม่ได้ GitHub สร้างบน Git |
Git และ GitHub ทำงานร่วมกันอย่างไร
ความเชื่อมโยงระหว่างทั้งสองคือ remote หรือรีโพซิทอรีรีโมต รีโพซิทอรีในเครื่องเก็บที่อยู่ของรีโพซิทอรีบน GitHub ภายใต้ชื่อสั้น ซึ่งโดยค่าเริ่มต้นคือ origin หลังจากนั้นการแลกเปลี่ยนใช้คำสั่งสามตัว:
git pushส่งคอมมิตใหม่ของคุณขึ้นเซิร์ฟเวอร์git fetchดาวน์โหลดคอมมิตของผู้อื่นโดยไม่แตะไฟล์ของคุณgit pullดาวน์โหลดและรวมการเปลี่ยนแปลงเข้าบรานช์ปัจจุบันทันที (โดยพื้นฐานคือfetch+mergeหรือrebase)
สิ่งสำคัญ: GitHub มองไม่เห็นโค้ดของคุณจนกว่าคุณจะส่งมัน คอมมิตมีอยู่เฉพาะในเครื่องจนกว่าจะ git push ครั้งแรก นี่คือความผิดพลาดที่มือใหม่พบบ่อย "ฉันคอมมิตแล้ว แต่บน GitHub ไม่มีอะไรเลย"
เส้นทางทั่วไป: จากโปรเจกต์ในเครื่องถึง GitHub
# 1. สร้างรีโพซิทอรีในเครื่อง
cd my-project
git init
git add .
git commit -m "คอมมิตแรก"
# 2. สร้างรีโพซิทอรีว่างบน github.com (ไม่มี README)
# คัดลอกที่อยู่ แล้วเชื่อมเป็น remote
git remote add origin git@github.com:username/my-project.git
# 3. เปลี่ยนชื่อบรานช์เป็น main แล้วส่งขึ้นไป
git branch -M main
git push -u origin main
แฟล็ก -u (รูปเต็ม --set-upstream) เชื่อมบรานช์ main ในเครื่องกับบรานช์รีโมต หลังจากนั้นพิมพ์แค่ git push และ git pull โดยไม่ต้องใส่อาร์กิวเมนต์ก็พอ
เส้นทางกลับ: เริ่มจากรีโพซิทอรีบน GitHub
หากโปรเจกต์อยู่บน GitHub แล้ว ไม่ต้องสร้างใหม่ แต่โคลน:
git clone https://github.com/username/my-project.git
cd my-project
คำสั่งจะดาวน์โหลดประวัติทั้งหมดและตั้งค่า remote origin ให้โดยอัตโนมัติ
การยืนยันตัวตน: SSH หรือ HTTPS
ตั้งแต่ปี 2021 GitHub ไม่รับรหัสผ่านของบัญชีเมื่อทำงานกับ Git ผ่าน HTTPS มีสองวิธีที่ใช้ได้
HTTPS + Personal Access Token โทเคนสร้างได้ในการตั้งค่าบัญชี (Settings → Developer settings) และป้อนแทนรหัสผ่าน เพื่อไม่ต้องป้อนทุกครั้ง Git ใช้ตัวจัดการข้อมูลรับรอง ซึ่งบน Windows ติดตั้งมาพร้อม Git for Windows
คีย์ SSH เป็นวิธีที่นายจ้างคาดหวังให้คุณตั้งค่าเองได้:
# สร้างคีย์
ssh-keygen -t ed25519 -C "you@example.com"
# แสดงส่วนสาธารณะและเพิ่มบน GitHub:
# Settings → SSH and GPG keys → New SSH key
cat ~/.ssh/id_ed25519.pub
# ตรวจสอบการเชื่อมต่อ
ssh -T git@github.com
เมื่อสำเร็จ GitHub จะทักทายด้วยชื่อผู้ใช้ของคุณและแจ้งว่าไม่ให้สิทธิ์เข้าเชลล์ ซึ่งเป็นเรื่องปกติ ที่อยู่รีโพซิทอรีต้องใช้รูปแบบ git@github.com:user/repo.git ไม่ใช่ https://
หากรีโพซิทอรีเชื่อมผ่าน HTTPS อยู่แล้ว เปลี่ยนเป็น SSH ได้ด้วยคำสั่งเดียว:
git remote set-url origin git@github.com:username/my-project.git
GitHub, GitLab และอื่น ๆ ต่างกันอย่างไร
GitHub ไม่ใช่โฮสต์ Git เพียงแห่งเดียว ทุกแห่งทำงานกับ Git ตัวเดียวกัน ดังนั้นรีโพซิทอรีย้ายจากที่หนึ่งไปอีกที่ได้โดยไม่สูญเสียประวัติ ความต่างอยู่ที่ชุดเครื่องมือรอบโค้ด
| เซอร์วิส | จุดเด่น | เมื่อไรควรเลือก |
|---|---|---|
| GitHub | ชุมชน open source ใหญ่ที่สุด GitHub Actions, Copilot | พอร์ตโฟลิโอ โปรเจกต์โอเพนซอร์ส สตาร์ทอัปส่วนใหญ่ |
| GitLab | CI/CD ในตัวตั้งแต่แรก ติดตั้งบนเซิร์ฟเวอร์ของตัวเองได้ (self-hosted) | บริษัทที่ต้องการเก็บโค้ดไว้ในโครงสร้างพื้นฐานของตัวเอง |
| Bitbucket | เชื่อมกับ Jira และผลิตภัณฑ์ของ Atlassian | ทีมที่ทำงานในระบบนิเวศ Atlassian |
| Gitea, Forgejo | โซลูชันโอเพนซอร์สเบาที่ติดตั้งเอง | ทีมเล็ก เซิร์ฟเวอร์ที่บ้าน |
ใน GitLab คำขอ merge เรียกว่า merge request ส่วนใน GitHub เรียก pull request แต่แก่นเดียวกัน คือเสนอการเปลี่ยนแปลงจากบรานช์และอภิปรายก่อน merge คำศัพท์ต่างกัน แต่คำสั่ง Git เหมือนกัน
ในรีโพซิทอรีในเครื่องเดียวสามารถมี remote หลายตัวพร้อมกัน เช่น สำเนาโปรเจกต์ทั้งบน GitHub และ GitLab:
git remote add gitlab git@gitlab.com:username/my-project.git
git push gitlab main
git remote -v
ต้องใช้ GitHub ไหม ถ้าทำงานคนเดียว
ในทางเทคนิคไม่จำเป็น Git ทำงานในเครื่องได้ดี แต่รีโพซิทอรีรีโมตแม้สำหรับโปรเจกต์คนเดียวก็มีข้อดีสามประการที่สำคัญ
- สำรองข้อมูล โน้ตบุ๊กพัง โค้ดและประวัติทั้งหมดยังอยู่บนเซิร์ฟเวอร์
- ทำงานจากหลายอุปกรณ์ ที่บ้านและที่ทำงาน คุณซิงก์ด้วย
pushและpull - พอร์ตโฟลิโอ ตอนสมัครงานตำแหน่งจูเนียร์ โปรไฟล์ GitHub มักถูกดูก่อนเรซูเม่ ว่ามีโปรเจกต์จริง คอมมิตที่มีความหมาย และ README หรือไม่
มือใหม่ควรเริ่มจากตรงไหน
ไม่ควรเรียน Git และ GitHub พร้อมกัน ลำดับสำคัญ เริ่มจากวงจรในเครื่องก่อน: git init, git status, git add, git commit, git log บรานช์ และการ merge เมื่อทำได้โดยไม่ต้องดูคำแนะนำ ให้สมัครบัญชี GitHub ตั้งค่า SSH และเรียนรู้ push, pull, fetch ขั้นสุดท้ายคือกระบวนการทำงานเป็นทีม: fork บรานช์สำหรับงาน pull request และการรีวิว
นายจ้างดูอะไรใน GitHub ของคุณ
กราฟกิจกรรมสีเขียวไม่ใช่สิ่งสำคัญที่สุด ผู้รีวิวที่มีประสบการณ์ประเมินสิ่งอื่นภายในไม่กี่นาที:
- ข้อความคอมมิตที่เข้าใจได้ แทนที่จะเป็น "fix", "123", "แก้ไข"
- คอมมิตเล็ก ๆ ที่มีเหตุผล ไม่ใช่คอมมิตยักษ์ก้อนเดียวที่ "อัปโหลดโปรเจกต์"
- README ที่อธิบายวิธีรันโปรเจกต์
- ไฟล์
.gitignoreไม่มีnode_modules,.envที่มีรหัสผ่าน หรือไฟล์ของ IDE ในรีโพซิทอรี - บรานช์และ pull request แม้ในโปรเจกต์การเรียน ซึ่งแสดงว่าคุณคุ้นเคยกับกระบวนการทำงานเป็นทีม
ข้อผิดพลาดที่มือใหม่พบบ่อย
"fatal: not a git repository"
คุณรันคำสั่ง Git นอกรีโพซิทอรี ไปยังโฟลเดอร์โปรเจกต์หรือรัน git init การลงทะเบียนบน GitHub ไม่เกี่ยวข้อง นี่เป็นข้อผิดพลาดในเครื่อง
"Permission denied (publickey)"
คีย์ SSH ยังไม่ได้สร้าง ไม่ได้เพิ่มบน GitHub หรือยังไม่ได้โหลดเข้า ssh-agent ตรวจด้วย ssh -T git@github.com และรายการคีย์ในการตั้งค่าบัญชี
"rejected … (fetch first)" ตอน push
มีคอมมิตบนเซิร์ฟเวอร์ที่คุณไม่มี เช่น คุณสร้างรีโพซิทอรีบน GitHub พร้อม README ให้ดึงการเปลี่ยนแปลงมาก่อน: git pull --rebase origin main แล้วค่อย git push อีกครั้ง อย่าใช้ --force จนกว่าจะเข้าใจว่าจะเขียนทับงานของใคร
ความลับในรีโพซิทอรีสาธารณะ
รหัสผ่านหรือ API key ที่หลุดเข้าไปในคอมมิตจะยังอยู่ในประวัติ แม้จะลบไฟล์ทีหลัง คีย์นั้นต้องออกใหม่ทันที และควรเพิ่ม .env ไว้ใน .gitignore ตั้งแต่ก่อน
สรุป
Git คือเครื่องมือควบคุมเวอร์ชันบนคอมพิวเตอร์ของคุณ GitHub คือบริการที่เก็บรีโพซิทอรีเหล่านั้นไว้บนคลาวด์ และสร้างการทำงานเป็นทีมรอบ ๆ GitLab, Bitbucket และอื่น ๆ เป็นทางเลือกของ GitHub ไม่ใช่ทางเลือกของ Git ทุกแห่งใช้คอมมิต บรานช์ และคำสั่งชุดเดียวกัน เริ่มจาก Git ในเครื่อง จากนั้นเชื่อม remote และตั้งค่า SSH การเชื่อมรีโพซิทอรีในเครื่องกับ GitHub, push, pull และ fetch ถูกอธิบายและฝึกจริงในหลักสูตร Git
คำถามที่พบบ่อย
GitHub ฟรีหรือไม่?
ใช่ แพ็กเกจฟรีให้สร้างรีโพซิทอรีได้ไม่จำกัดทั้งแบบสาธารณะและส่วนตัว แพ็กเกจแบบเสียเงินเพิ่มฟีเจอร์ของทีมและนาที GitHub Actions มากขึ้นสำหรับโปรเจกต์ส่วนตัว
ใช้ GitHub โดยไม่ใช้บรรทัดคำสั่งได้หรือไม่?
ได้ ผ่าน GitHub Desktop หรือแผง Git ในเอดิเตอร์ แต่เครื่องมือเหล่านี้เรียกคำสั่ง Git ตัวเดียวกัน จึงยังควรเข้าใจคำสั่งเหล่านั้น โดยเฉพาะเมื่อเกิดความขัดแย้ง
ต้องติดตั้ง Git หรือไม่ หากมีบัญชี GitHub แล้ว?
ต้อง บัญชีให้พื้นที่เก็บข้อมูล ส่วนการทำงานกับโค้ดในเครื่อง เช่น คอมมิต บรานช์ และ push ทำผ่าน Git ที่ติดตั้งไว้
ย้ายรีโพซิทอรีจาก GitHub ไป GitLab ได้อย่างไร?
เพิ่ม remote ใหม่แล้วส่งทุกบรานช์และแท็กไป: git push gitlab --all และ git push gitlab --tags ประวัติจะย้ายครบถ้วนเพราะทั้งสองเซอร์วิสทำงานบน Git
รีโพซิทอรีสาธารณะต่างจากส่วนตัวอย่างไร?
สาธารณะทุกคนบนอินเทอร์เน็ตเห็นได้ ส่วนตัวเห็นเฉพาะคุณและผู้ที่ได้รับเชิญ สำหรับพอร์ตโฟลิโอควรใช้รีโพซิทอรีสาธารณะ
หัวข้อนี้สอนอย่างละเอียดพร้อมฝึกปฏิบัติในคอร์ส “Git с нуля до уверенного разработчика”
- Зачем вообще нужен Git — и почему без него не берут на работу
- GitHub и удалённые репозитории: ваш код в облаке