หากเพิ่มไฟล์บน local machine แล้วพยายาม pull remote repository โดยไม่ add ไฟล์เหล่านั้นเข้า repository จะเจอ error nothing added to commit but untracked files present
คู่มืออธิบายความหมาย error นี้ และ 2 วิธีแก้ไข พร้อมข้อดี/ข้อเสีย
nothing added to commit but untracked files present
Git เป็น distributed version control system สร้าง local copy ของ repository และแก้ไขเองได้ การเปลี่ยนแปลงไม่สะท้อน main project จนกว่าจะ commit
เมื่อ pull code จาก remote server ต้องแน่ใจว่าไฟล์ทั้งหมดบน local machine อยู่ใน Git staging area หรือเป็นส่วนของ commit แล้ว เพราะ Git ต้องรู้ว่าไฟล์ไหนเป็นส่วนของ repository
รัน git pull บน repository ที่ยังไม่ add ทุกไฟล์เข้า staging area หรือ commit จะได้ error:
nothing added to commit but untracked files present
Untracked Files: พื้นฐาน (Untracked Files: A Primer)
Untracked files คือไฟล์ในโปรเจกต์ที่ configured กับ Git แต่อยู่ใน Git repository (ยังไม่ถูก track)
ไฟล์จะกลายเป็นส่วนของ Git repository ก็ต่อเมื่อ add ด้วยคำสั่ง git add ให้สร้างและแก้ไขไฟล์บน local machine ได้โดยไม่ต้องเป็นส่วนของ line of development ใน repository
Untracked files ควร add เข้าโปรเจกต์ หรือ ignore ด้วย rule ในไฟล์ .gitignore
วิธีแก้ไข (The Solution)
มี 2 วิธีแก้ไข:
1. Add untracked files เข้า Git repository
ใช้ git add:
git add file_to_add.md
ไฟล์จะย้ายเข้า staging area เมื่ออยู่ใน staging area จะกลายเป็น tracked เพราะไฟล์ใน staging area จะถูกเพิ่มเข้า commit ถัดไป (เว้นแต่ remove ออก) Git ต้อง track ไฟล์เหล่านี้เพื่อรู้ว่าจะ add เข้า commit
2. Ignore ไฟล์ที่เพิ่มมา (Ignore the Files)
เหมาะหากไม่อยากให้ไฟล์ที่สร้างกลายเป็นส่วนของ Git repository พบบ่อยกับ config files ที่เก็บ API keys หรือโฟลเดอร์ local dependencies
Ignore โดยเพิ่ม entry ใน .gitignore:
file_to_add.md directory/
วาง .gitignore ได้ที่ directory ใดในโปรเจกต์ แต่อย่างดีควรวางที่ root folder เพื่อเข้าถึงง่าย Rules ใน .gitignore จะ apply recursively กับไฟล์/โฟลเดอร์ภายใน
หลังแก้ไข error แล้ว สามารถ pull latest version ด้วย:
git pull
คำสั่งควรสำเร็จ เพราะตอนนี้ track หรือ ignore ไฟล์ทั้งหมดในโฟลเดอร์โปรเจกต์แล้ว
สรุป
Error nothing added to commit but untracked files present เกิดเมื่อสร้างไฟล์ใหม่ใน local working copy แล้วลืม add เข้า staging area ก่อน pull version ใหม่
แก้ไข: add ไฟล์ที่ cause error เข้า staging area หรือ ignore ด้วย .gitignore ตอนนี้คุณแก้ Git error พบบ่อยนี้อย่างมืออาชีพแล้ว!