ถ้าคุณเพิ่งพิมพ์คำสั่ง git remote add origin <url> แล้วเจอข้อความสีแดงแบบนี้ขึ้นมาทันที
fatal: remote origin already exists.
ไม่ต้องตกใจ — error นี้ไม่ได้แปลว่าโปรเจกต์พัง ไม่ได้แปลว่าโค้ดหาย และไม่ได้เกิดจากคุณทำอะไรผิดขั้นตอน มันแค่บอกตรงๆ ว่า Git มองเห็นว่า repository ของคุณมี remote ที่ชื่อ origin ตั้งอยู่แล้ว จะเพิ่มซ้ำอีกอันด้วยชื่อเดิมไม่ได้ บทความนี้จะพาไล่ตั้งแต่สาเหตุจริงๆ ว่าเกิดจากอะไร ไปจนถึง 3 วิธีแก้ที่ใช้ได้จริงทุกกรณี และวิธีป้องกันไม่ให้ต้องมาเจอ error remote origin already exists ซ้ำอีกในอนาคต
error นี้เกิดจากอะไรกันแน่
ใน Git ทุก repository สามารถผูกกับ “remote” หลายตัวได้ (remote คือที่อยู่ปลายทางบนเซิร์ฟเวอร์ เช่น GitHub, GitLab หรือ Bitbucket) แต่ ชื่อของแต่ละ remote ต้องไม่ซ้ำกัน ภายใน repository เดียว ชื่อที่ Git ตั้งให้เป็นค่าเริ่มต้นเมื่อ clone โปรเจกต์มาคือ origin เสมอ
error นี้เกิดขึ้นเมื่อ Git เจอว่ามีคนตั้งชื่อ origin ไว้แล้ว ซึ่งสถานการณ์ที่พบบ่อยที่สุดมีอยู่ไม่กี่แบบ
- คุณ
git cloneโปรเจกต์มาจาก GitHub อยู่แล้ว (ซึ่งจะผูกoriginให้อัตโนมัติ) แล้วยังไปพิมพ์git remote add originซ้ำอีกครั้ง - คุณเคยรัน
git remote add originไปแล้วครั้งหนึ่งก่อนหน้านี้ในเซสชันเดียวกัน อาจจะลืมไปแล้วว่าทำไปแล้ว - ใช้เครื่องมือ GUI อย่าง GitHub Desktop หรือปุ่ม “Publish to GitHub” ใน VS Code ซึ่งไปตั้งค่า
originให้อัตโนมัติตั้งแต่ตอนสร้าง repository แล้วคุณมาพิมพ์คำสั่งเดิมซ้ำทาง terminal อีกที - คัดลอกคำสั่งจากหน้าเว็บ GitHub ตอนสร้าง repository ใหม่ (ช่อง “…or push an existing repository from the command line”) มารันซ้ำสองรอบ
พูดง่ายๆ คือไม่มีอะไรเสียหาย ระบบแค่กันไม่ให้คุณตั้งชื่อซ้ำโดยไม่รู้ตัว ซึ่งถ้าปล่อยให้ทำได้ อาจจะทำให้ Git สับสนว่าจะ push/pull ไปที่ปลายทางไหนกันแน่
เช็คก่อนว่าตอนนี้มี remote อะไรผูกอยู่บ้าง
ก่อนจะแก้ ให้เช็คสถานะปัจจุบันก่อนเสมอ จะได้เลือกวิธีแก้ที่เหมาะกับสถานการณ์จริง ไม่ใช่เดาสุ่ม เปิด terminal ในโฟลเดอร์โปรเจกต์แล้วพิมพ์
git remote -v
คำสั่งนี้จะแสดงชื่อ remote ทั้งหมดที่ผูกอยู่ พร้อม URL ทั้งฝั่ง fetch และ push ตัวอย่างผลลัพธ์ที่มักเจอ
origin https://github.com/username/old-repo.git (fetch) origin https://github.com/username/old-repo.git (push)
ถ้าเห็นผลลัพธ์แบบนี้ แปลว่ามี origin ผูกอยู่จริง และ URL ที่ผูกอยู่อาจจะ ไม่ใช่ repository ที่คุณตั้งใจจะ push ไปด้วยซ้ำ (เช่น เผลอ copy URL ของ repo เก่ามา) นี่คือจุดสำคัญที่ต้องเช็คก่อนเลือกวิธีแก้ในหัวข้อถัดไป
3 วิธีแก้ error remote origin already exists
เลือกวิธีตามสถานการณ์ที่ตรงกับคุณที่สุด ทั้ง 3 วิธีปลอดภัยกับโค้ดที่มีอยู่แล้วในเครื่อง ไม่มีวิธีไหนทำให้ commit หรือไฟล์ในเครื่องหายไป
วิธีที่ 1: เปลี่ยน URL ของ origin เดิม (แนะนำที่สุด ใช้บ่อยที่สุด)
ถ้าเช็คจาก git remote -v แล้วพบว่ามี origin อยู่แล้วแต่ URL ผิด หรือคุณแค่ต้องการเปลี่ยนปลายทางให้ชี้ไป repository ใหม่ วิธีนี้ง่ายและเร็วที่สุด ไม่ต้องลบอะไรทิ้ง
git remote set-url origin https://github.com/username/new-repo.git
หลังรันเสร็จ เช็คอีกครั้งด้วย git remote -v เพื่อยืนยันว่า URL เปลี่ยนไปตามที่ต้องการแล้ว วิธีนี้เหมาะที่สุดกับกรณี “ตั้งใจจะเปลี่ยนปลายทาง” เช่น ย้าย repo ไปอยู่ organization ใหม่ หรือเปลี่ยนจาก HTTPS เป็น SSH URL
วิธีที่ 2: ลบ origin เดิมแล้วเพิ่มใหม่
ถ้าอยากเริ่มจากศูนย์จริงๆ หรือไม่แน่ใจว่า URL เดิมตั้งไว้ถูกหรือไม่ วิธีนี้ชัดเจนตรงไปตรงมากว่า ลบทิ้งก่อนแล้วค่อยเพิ่มใหม่
git remote remove origin git remote add origin https://github.com/username/new-repo.git
git remote remove (บางเวอร์ชันเก่าใช้ git remote rm ได้เหมือนกัน) แค่ตัดการเชื่อมโยงระหว่าง repository ในเครื่องกับ URL ปลายทาง ไม่กระทบ commit history หรือไฟล์ในเครื่องแม้แต่นิดเดียว และไม่กระทบข้อมูลบนฝั่ง GitHub/GitLab ด้วย เพราะเป็นการลบแค่ “การอ้างอิง” ฝั่งเครื่องคุณเท่านั้น
วิธีที่ 3: ตั้งชื่อ remote ใหม่แทน ถ้าต้องการเก็บทั้งสองไว้
บางสถานการณ์คุณอาจต้องการ push โค้ดเดียวกันไปสองที่ เช่น มี origin เป็น repo หลักบน GitHub อยู่แล้ว แต่ต้องการเพิ่ม mirror ไปยัง GitLab ด้วย กรณีนี้ไม่ต้องลบ origin เดิม แค่ตั้งชื่อใหม่ให้ remote ตัวที่สอง
git remote add gitlab https://gitlab.com/username/new-repo.git
จากนั้นจะ push ไปที่ไหนก็ระบุชื่อ remote ตามที่ตั้งไว้ เช่น git push origin main หรือ git push gitlab main วิธีนี้เหมาะกับทีมที่ต้องการสำรองโค้ดไว้มากกว่าหนึ่งแพลตฟอร์ม หรือใช้ origin เป็นของทีม กับอีกชื่อหนึ่งเป็น fork ส่วนตัว (ชื่อที่นิยมใช้คือ upstream)
เช็คให้ชัวร์ก่อน push ว่าตั้งค่าถูกแล้ว
ไม่ว่าจะเลือกวิธีไหนใน 3 วิธีด้านบน หลังทำเสร็จควรเช็คซ้ำอีกครั้งก่อน push จริง เพื่อความชัวร์ว่า URL ที่ผูกไว้ถูกต้อง
git remote -v
ถ้า URL ที่แสดงตรงกับ repository ที่ตั้งใจไว้ทั้งฝั่ง fetch และ push ก็พร้อม push ได้เลยด้วย
git push -u origin main
แฟล็ก -u (ย่อจาก --set-upstream) จะจำไว้ว่า branch main ในเครื่องผูกกับ origin/main บนรีโมท ครั้งต่อไปแค่พิมพ์ git push เฉยๆ ก็พอ ไม่ต้องระบุชื่อ remote และชื่อ branch ซ้ำทุกครั้ง
เจอ error นี้บ่อยตอนไหนบ้าง
รวมสถานการณ์จริงที่ทำให้เจอ fatal: remote origin already exists บ่อยที่สุด เผื่อเช็คว่าตรงกับกรณีของคุณไหม
Clone โปรเจกต์มาแล้วรันคำสั่งจากหน้าเว็บ GitHub ซ้ำ — ตอนสร้าง repository ใหม่บน GitHub หน้าเว็บจะโชว์คำสั่งชุดหนึ่งให้ copy ไปรัน ซึ่งรวมทั้ง git init, git remote add origin และ git push แต่ถ้าคุณ git clone repo นั้นมาก่อนแล้ว (ซึ่งจะผูก origin ให้อัตโนมัติ) แล้วยังไปรันชุดคำสั่งจากหน้าเว็บซ้ำอีกที ก็จะเจอ error นี้ทันทีตรงบรรทัด git remote add origin
ใช้ GUI ตั้งค่าไว้แล้ว แต่มาพิมพ์ terminal ซ้ำ — เครื่องมืออย่าง GitHub Desktop, Sourcetree หรือปุ่ม “Publish Branch” ใน VS Code จะตั้งค่า origin ให้อัตโนมัติตอนกด publish ครั้งแรก ถ้าหลังจากนั้นสลับมาใช้ terminal แล้วลืมว่าตั้งไปแล้ว พิมพ์คำสั่งเดิมซ้ำก็จะเจอ error แบบเดียวกัน
Copy-paste คำสั่งจาก tutorial หรือ README เก่า — README บางโปรเจกต์แนบคำสั่ง setup ทั้งชุดไว้ให้ทำตาม ถ้า repository ของคุณผ่านการตั้งค่าไปแล้วรอบหนึ่ง แล้วมาไล่ทำตาม README ซ้ำอีกรอบ (เช่น ตอน onboarding โปรเจกต์ทีม) ก็จะเจอ error นี้ที่ขั้นตอนตั้งค่า remote
ทุกกรณีข้างต้นแก้ด้วยวิธีเดียวกันคือเช็คด้วย git remote -v ก่อน แล้วเลือกวิธีที่ 1-3 ตามความเหมาะสม
วิธีป้องกันไม่ให้เจอ error นี้ซ้ำอีก
วิธีง่ายที่สุดคือสร้างนิสัยเช็คก่อนเพิ่มทุกครั้ง แทนที่จะพิมพ์ git remote add origin ทันที ให้เช็ค git remote -v ก่อนเสมอโดยเฉพาะเวลาเริ่มโปรเจกต์ใหม่หรือ setup เครื่องใหม่
ถ้าไม่แน่ใจว่ามี origin อยู่แล้วหรือเปล่า ใช้แพตเทิร์นนี้แทนได้ — เช็คก่อนว่ามีไหม ถ้ามีให้เปลี่ยน URL แทนการเพิ่มใหม่
git remote -v
ถ้าคำสั่งด้านบนไม่แสดงอะไรเลย (ว่างเปล่า) แปลว่ายังไม่มี remote เลย ใช้ git remote add origin <url> ได้ตามปกติ แต่ถ้าเห็นรายการ origin อยู่แล้ว ให้ใช้ git remote set-url origin <url> แทนทันที จะได้ไม่ต้องเจอ error นี้อีกเลยไม่ว่าจะรันกี่รอบก็ตาม
คำถามที่พบบ่อย
ลบ remote origin แล้วโค้ดที่เคย push ไปแล้วจะหายไหม ไม่หาย git remote remove origin ลบแค่การเชื่อมโยงฝั่งเครื่องคุณกับ URL ปลายทาง ไม่ได้ไปแตะอะไรบน GitHub/GitLab เลย commit ทั้งหมดที่ push ไปแล้วยังอยู่ครบตามเดิม
เปลี่ยน URL ของ origin ด้วย set-url แล้วต้อง push ใหม่ไหม ถ้าเปลี่ยนไปชี้ repository ใหม่ที่ยังไม่มี commit ใดๆ เลย ต้อง git push -u origin main (หรือชื่อ branch หลักของคุณ) อีกครั้งเพื่อ push commit ทั้งหมดขึ้นไปตั้งต้น แต่ถ้าเปลี่ยนแค่ URL ของ repo เดิม (เช่น จาก HTTPS เป็น SSH) ไม่ต้อง push ซ้ำ เพราะเป็นแค่ endpoint คนละแบบของ repo เดียวกัน
fatal: remote origin already exists แปลว่าโปรเจกต์พังหรือเปล่า ไม่พัง เป็นแค่ safety check ของ Git ที่ไม่ยอมให้ตั้งชื่อ remote ซ้ำโดยไม่รู้ตัว ไฟล์และ commit history ในเครื่องไม่ได้รับผลกระทบใดๆ
ต้องใช้ชื่อ origin เสมอไหม หรือตั้งชื่ออื่นได้ ตั้งชื่ออื่นได้ origin เป็นแค่ชื่อที่นิยมใช้เป็นค่าเริ่มต้นเท่านั้น ไม่ใช่คำสงวนของ Git จะตั้งเป็น main-repo, production หรือชื่ออะไรก็ได้ ขอแค่ไม่ซ้ำกับ remote อื่นที่มีอยู่แล้วใน repository เดียวกัน
git remote set-url กับ git remote add ต่างกันยังไง git remote add <ชื่อ> <url> ใช้ตอนที่ยังไม่มี remote ชื่อนั้นอยู่เลย ส่วน git remote set-url <ชื่อ> <url> ใช้แก้ URL ของ remote ที่มีอยู่แล้ว ถ้าใช้ add กับชื่อที่มีอยู่แล้วจะเจอ error remote origin already exists ทันที ในขณะที่ set-url ใช้ได้ปกติแม้ remote นั้นจะมีอยู่แล้วก็ตาม เพราะเป็นการ “แก้” ไม่ใช่ “เพิ่ม”
สรุป
error fatal: remote origin already exists เกิดจากการพยายามตั้งชื่อ remote ที่ชื่อซ้ำกับที่มีอยู่แล้ว แก้ได้ 3 ทาง เลือกตามสถานการณ์
- เปลี่ยน URL เดิม ด้วย
git remote set-url origin <url>— ใช้เมื่อแค่ต้องการเปลี่ยนปลายทาง - ลบแล้วเพิ่มใหม่ ด้วย
git remote remove originตามด้วยgit remote add origin <url>— ใช้เมื่อต้องการเริ่มตั้งค่าใหม่ทั้งหมด - ตั้งชื่อใหม่แทน ด้วย
git remote add <ชื่ออื่น> <url>— ใช้เมื่อต้องการเก็บ remote เดิมไว้และเพิ่มปลายทางที่สอง
ไม่ว่าจะเลือกวิธีไหน commit และไฟล์ในเครื่องปลอดภัยทั้งหมด สิ่งที่เปลี่ยนมีแค่การเชื่อมโยงไปยังปลายทางบนเซิร์ฟเวอร์เท่านั้น และถ้าสร้างนิสัยเช็ค git remote -v ก่อนเพิ่ม remote ทุกครั้ง ก็แทบไม่มีโอกาสเจอ error นี้อีกเลย
1 thought on “แก้ error “fatal: remote origin already exists” ใน Git แบบเข้าใจง่าย”