LEVEL 1 · พื้นฐานที่ใช้ทุกวัน
ทำงานกับ Remote
จนถึงบทนี้ทุกอย่างเกิดในเครื่องคุณคนเดียว Remote คือสำเนาของ repository ที่อยู่บนเซิร์ฟเวอร์ (เช่น GitHub) ทำหน้าที่เป็นจุดนัดพบให้ทีมแลกเปลี่ยนงานกัน
5.1 clone และ origin
git clone <url> ดึงทั้ง repository (ประวัติครบ) ลงเครื่อง และตั้งชื่อย่อให้เซิร์ฟเวอร์ต้นทางว่า origin โดยอัตโนมัติ — origin เป็นแค่ชื่อเล่นของ URL ยาว ๆ จะได้ไม่ต้องพิมพ์ซ้ำ
5.2 ยืนยันตัวตนกับ remote — HTTPS vs SSH
ก่อน push (หรือ clone repo ส่วนตัว) ได้ Git ต้องพิสูจน์ก่อนว่าคุณคือคุณจริง ๆ — ด่านนี้เป็นจุดที่มือใหม่แทบทุกคนสะดุดตอน push ครั้งแรก เพราะรูปแบบ URL ของ remote มีสองสายที่ยืนยันตัวตนต่างกัน:
| HTTPS | SSH | |
|---|---|---|
| รูปแบบ URL | https://github.com/user/repo.git | git@github.com:user/repo.git |
| ยืนยันตัวตนด้วย | Personal Access Token (PAT) | คู่กุญแจ SSH (public/private) |
| ตั้งค่า | เร็ว แต่ต้องกรอก token ทุกเครื่องที่ใช้ | ตั้งครั้งเดียวต่อเครื่อง ใช้ได้ทุก repo |
ฝั่ง SSH ตั้งค่าครั้งเดียวแล้วไม่ต้องยุ่งอีก:
$ ssh-keygen -t ed25519 -C "you@example.com" # สร้างคู่กุญแจ — Enter รับค่าเริ่มต้นได้ทุกช่อง
$ ssh-add ~/.ssh/id_ed25519 # โหลดกุญแจเข้า ssh-agent
$ cat ~/.ssh/id_ed25519.pub # คัดลอกไปวางที่ GitHub → Settings → SSH keys
$ ssh -T git@github.com # ทดสอบ — ควรเห็นข้อความทักทายชื่อคุณสลับ remote ระหว่างสองแบบได้ทุกเมื่อโดยไม่ต้อง clone ใหม่ ด้วย git remote set-url origin <url ใหม่>
5.3 fetch ต่างจาก pull อย่างไร — จุดที่คนสับสนมากที่สุด
fetch = ดาวน์โหลดงานใหม่มาดูก่อน ปลอดภัยเสมอ · pull = fetch แล้ว merge เข้า branch ให้เลยในก้าวเดียว · push = ส่งงานของคุณขึ้นเซิร์ฟเวอร์กฎง่าย ๆ: fetch ไม่เคยแก้ไฟล์ในโฟลเดอร์คุณ มันแค่อัปเดต "ความรู้" ว่าเซิร์ฟเวอร์มีอะไรใหม่ ส่วน pull เปลี่ยนไฟล์จริงเพราะมัน merge ให้เลย ถ้าอยากเห็นก่อนว่าทีมเปลี่ยนอะไรมาแล้วค่อยรวม ให้ fetch แล้วดู git log origin/main ก่อน
5.4 ไปทำงานต่อบน branch ของเพื่อนที่ยังไม่มีในเครื่อง
เพื่อนสร้าง feature-x แล้ว push ขึ้นเซิร์ฟเวอร์ แต่เครื่องคุณยังไม่มี branch นี้ (มีแค่ origin/feature-x ที่เห็นหลัง fetch) ไม่ต้องสร้าง branch ใหม่เอง แค่:
$ git fetch
$ git switch feature-x
branch 'feature-x' set up to track 'origin/feature-x'.
Switched to a new branch 'feature-x'Git ใช้หลัก "เดาแบบตรงไปตรงมา" (DWIM): ไม่มี branch ชื่อนี้ในเครื่อง แต่มี origin/feature-x ที่ชื่อตรงกันอยู่แหล่งเดียว มันจึงสร้าง branch ท้องถิ่นให้อัตโนมัติพร้อมผูก tracking กับ origin/feature-x เลยในคำสั่งเดียว — ทำงานต่อได้ทันทีเหมือนสร้างเอง หากมีมากกว่าหนึ่ง remote ที่มีชื่อนี้ Git จะเดาไม่ได้ ต้องระบุเองด้วย git switch -c feature-x --track origin/feature-x
5.5 push และ tracking branch
$ git push -u origin main # ส่งขึ้น + ผูก local กับ origin/main
$ git push # ครั้งต่อไปพิมพ์สั้น ๆ ได้เลย-u สร้างความสัมพันธ์ "tracking" ระหว่าง branch ในเครื่องกับบนเซิร์ฟเวอร์ ครั้งเดียวพอ หลังจากนั้น Git รู้เองว่า push/pull ควรคุยกับ branch ไหน
✅ สรุปบทที่ 5 —
cloneดึง repo + ตั้งชื่อต้นทางว่าorigin·fetchดาวน์โหลดมาดูเฉย ๆ ปลอดภัย,pull= fetch + merge เปลี่ยนไฟล์จริง ·pushส่งงานขึ้น,-uผูก tracking ครั้งเดียว · push ถูกปฏิเสธให้ pull ก่อน ไม่ใช่ force