Skip to content
Tayakorn
Git Handbook

Git Handbook

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 มีสองสายที่ยืนยันตัวตนต่างกัน:

HTTPSSSH
รูปแบบ URLhttps://github.com/user/repo.gitgit@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 อย่างไร — จุดที่คนสับสนมากที่สุด

เครื่องคุณlocal branchoriginเซิร์ฟเวอร์ (GitHub)fetch — ดาวน์โหลดมาเก็บไว้เฉย ๆ (ยังไม่รวม)pull = fetch + merge — ดาวน์โหลดแล้วรวมเข้า branch ทันทีpush — ส่งงานของคุณขึ้นไป
FIG 5.1 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 ไหน

สรุปบทที่ 5clone ดึง repo + ตั้งชื่อต้นทางว่า origin · fetch ดาวน์โหลดมาดูเฉย ๆ ปลอดภัย, pull = fetch + merge เปลี่ยนไฟล์จริง · push ส่งงานขึ้น, -u ผูก tracking ครั้งเดียว · push ถูกปฏิเสธให้ pull ก่อน ไม่ใช่ force

Read the full book