ฉันพยายามส่งไฟล์ไปยัง github โดยใช้ bash มีอยู่แล้วและฉันกำลังอัปโหลดเวอร์ชันใหม่พร้อมบรรทัดและโค้ดใหม่เป็นต้น แต่เมื่อฉันลองgit add
แล้วgit status
มันขึ้นว่า:
ในสาขาหลัก
ไม่มีอะไรให้กระทำไดเร็กทอรีการทำงานสะอาด
และไฟล์ที่ฉันใช้ก็เพิ่งแก้ไข
ฉันพยายามส่งไฟล์ไปยัง github โดยใช้ bash มีอยู่แล้วและฉันกำลังอัปโหลดเวอร์ชันใหม่พร้อมบรรทัดและโค้ดใหม่เป็นต้น แต่เมื่อฉันลองgit add
แล้วgit status
มันขึ้นว่า:
ในสาขาหลัก
ไม่มีอะไรให้กระทำไดเร็กทอรีการทำงานสะอาด
และไฟล์ที่ฉันใช้ก็เพิ่งแก้ไข
git diff
(หรือgit status
) ไม่แสดงสิ่งที่อธิบายว่าเหตุใดจึงไม่มีอะไรให้เพิ่ม คำถามก็คือ "ทำไมคอมไพล์ถึงไม่ทราบว่าไฟล์ของฉันถูกเปลี่ยน"
คำตอบ:
ฉันมีปัญหาที่กาลครั้งหนึ่งฉันตั้งค่าดัชนีคอมไพล์เป็น 'ถือว่าไม่เปลี่ยนแปลง' ในไฟล์ของฉัน
คุณสามารถบอกให้คอมไพล์หยุดเพิกเฉยต่อการเปลี่ยนแปลงในไฟล์ด้วย:
git update-index --no-assume-unchanged path/to/file
หากวิธีนี้ไม่ช่วยในการรีเซ็ตอาจเพียงพอสำหรับกรณีแปลก ๆ อื่น ๆ
ในทางปฏิบัติฉันพบว่าการลบไฟล์แคชและรีเซ็ตให้ใช้งานได้:
git rm --cached path/to/file
git reset path/to/file
git rm --cached
หมายถึงการลบไฟล์จากดัชนีและreset
บอกคอมไพล์เพื่อโหลดดัชนีคอมไพล์จากกระทำที่ผ่านมา
git add -f path/to/the/file
มันจะเพิ่มไฟล์สำหรับการกระทำ
git add -f
ใช้ไฟล์ที่อยู่ในสถานะ "ถือว่าไม่เปลี่ยนแปลง" แล้วและมันใช้งานไม่ได้ต้องทำอย่างใดอย่างหนึ่งgit update-index
หรือgit rm --cached
ตามด้วยgit reset
เพื่อให้มันทำงาน
git rm --cached -r .
git reset .
git update-index --no-skip-worktree path/to/file
นี่คือวิธีที่ฉันแก้ไขปัญหาของฉัน
ตรวจดูไฟล์.gitignore
คุณอาจพบว่าไฟล์หรือส่วนขยายของไฟล์หรือเส้นทางไปยังไฟล์ที่คุณพยายามใช้งานตรงกับรายการใน.gitignore
ซึ่งจะอธิบายว่าเหตุใดไฟล์นั้นจึงถูกละเว้น (และไม่ได้รับการยอมรับว่าเป็นไฟล์ที่เปลี่ยนแปลง)
สิ่งนี้กลายเป็นกรณีของฉันเมื่อฉันมีปัญหาคล้าย ๆ กัน
lib/
สิ่งที่ทำให้ git ไม่สนใจโฟลเดอร์นี้ ไม่มีปัญหาอะไร - อย่างน้อยถ้าโฟลเดอร์นี้ไม่ใช่โฟลเดอร์หลักจากโปรเจ็กต์ของคุณเหมือนที่เกิดขึ้นกับฉัน
เช่นเดียวกับที่ได้พูดคุยกันไปแล้วไฟล์อาจถูกตั้งค่าสถานะเป็น "ไม่เปลี่ยนแปลง" ซึ่งโดยพื้นฐานแล้วจะบอกว่าคอมไพล์คุณจะไม่แก้ไขไฟล์ดังนั้นจึงไม่จำเป็นต้องติดตามการเปลี่ยนแปลงด้วย อย่างไรก็ตามสิ่งนี้อาจส่งผลกระทบต่อไฟล์หลายไฟล์และหากมีพื้นที่ทำงานขนาดใหญ่คุณอาจไม่ต้องการตรวจสอบทีละไฟล์ ในกรณีนี้คุณสามารถลอง: git update-index --really-refresh
ตามเอกสาร:
Like --refresh, but checks stat information unconditionally, without regard to the "assume unchanged" setting.
โดยพื้นฐานแล้วจะบังคับให้คอมไพล์ติดตามการเปลี่ยนแปลงของไฟล์ทั้งหมดโดยไม่คำนึงถึงแฟล็ก "ไม่เปลี่ยนแปลง"
git status
บอกว่าไม่มีการเปลี่ยนแปลงไฟล์ใด ๆ แต่git add .
เพิ่มไฟล์สองไฟล์และgit update-index --really-refresh
บอกว่าสองไฟล์นั้นต้องการการอัปเดต แต่ดูเหมือนจะไม่ทำอะไรเลย ความคิดใด ๆ ?
git ls-files -v | grep '^[[:lower:]]'
หากไม่มีอะไรช่วยคุณควรสร้างคำถามพร้อมรายละเอียดเพิ่มเติมเพื่อให้เราสามารถช่วยได้ คุณ.
ฟังดูบ้า แต่บางครั้งคุณก็ไม่ได้อยู่ใน repo ที่ถูกต้องแม้ว่าคุณจะคิดว่าเป็น ตัวอย่างเช่นคุณอาจย้ายไดเร็กทอรีหลัก แต่ลืมเปลี่ยน repos ในโปรแกรมแก้ไขข้อความของคุณ หรือในทางกลับกันคุณอยู่ใน repo ที่ถูกต้องในโปรแกรมแก้ไขข้อความ แต่ repo ไม่ถูกต้องในบรรทัดคำสั่ง ในสถานการณ์แรกคุณทำการแก้ไขในไฟล์ที่ถูกต้องแต่ไม่ใช่โฟลเดอร์เดียวกับที่เปิดในบรรทัดคำสั่งดังนั้นจึงเป็นไฟล์ที่ไม่ถูกต้อง ในสถานการณ์ที่สองคุณได้แก้ไขไฟล์ที่ถูกต้อง แต่ git บรรทัดคำสั่งของคุณไม่รู้จักการเปลี่ยนแปลงเนื่องจากคุณไม่ได้อยู่ในไดเร็กทอรีที่ถูกต้องในบรรทัดคำสั่ง
เราไม่เพียงพอที่จะตอบคำถามนี้ดังนั้นฉันจะให้คุณเดาหลาย ๆ อย่าง:
1) คุณซ่อนการเปลี่ยนแปลงของคุณเพื่อแก้ไขประเภท: git stash pop
2) คุณมีการเปลี่ยนแปลงและคุณยอมรับมันคุณควรจะเห็นความมุ่งมั่นของคุณ git log
3) คุณมีการเปลี่ยนแปลงบางอย่างgit reset --hard
หรืออื่น ๆ การเปลี่ยนแปลงของคุณอาจอยู่ที่นั่นใน reflog พิมพ์git reflog --all
ตามด้วยการตรวจสอบหรือเลือกเชอร์รี่อ้างอิงหากคุณเคยพบ
4) คุณได้ตรวจสอบ repo เดียวกันหลายครั้งและคุณคิดผิด
git commit --amend
ที่จะทำการเปลี่ยนแปลงใหม่ในการกระทำครั้งสุดท้ายของคุณ อย่าทำอย่างนั้นถ้าคุณแชร์คอมมิตไปแล้ว
มีเรื่องขี้ขลาดเช่นนี้เกิดขึ้น ปลั๊กอิน git ของ Eclipse Kepler ทำเครื่องหมายโฟลเดอร์โครงการทั้งหมดของฉันโดยอัตโนมัติว่าละเว้นในโฟลเดอร์. gitignore
เมื่อฉันไปcommit
ที่Team
เมนูพวกเขาทั้งหมดจะกลับไปเพิกเฉย เท่าที่ฉันสามารถบอกได้นี่เป็นเพราะฉันตั้งค่าเป็นที่มาในโครงการหลัก ยกเลิกการทำเครื่องหมายว่าdervied
แก้ไขแล้ว ฉันไม่เคยเห็นสิ่งนี้มาก่อนใน Indigo หวังว่ามันจะช่วยได้บ้าง
TL; DR; คุณอยู่ในพื้นที่เก็บข้อมูลที่ถูกต้องหรือไม่?
เรื่องราวของฉันค่อนข้างตลก แต่ฉันคิดว่ามันสามารถเกิดขึ้นได้กับคนที่อาจมีสถานการณ์คล้ายกันดังนั้นจึงแบ่งปันที่นี่
จริงในเครื่องของฉันฉันมีสองเก็บ Git แยกต่างหากrepo1
และการกำหนดค่าในไดเรกทอรีรากชื่อเดียวกันrepo2
source
ที่เก็บทั้งสองนี้โดยพื้นฐานแล้วเป็นที่เก็บของสองผลิตภัณฑ์ที่ฉันทำงานและเปิดใน บริษัท ของฉัน ตอนนี้สิ่งที่เป็นแนวทางมาตรฐานโครงสร้างไดเร็กทอรีของซอร์สโค้ดของผลิตภัณฑ์ทั้งหมดเหมือนกันทุกประการใน บริษัท ของฉัน
ดังนั้นโดยไม่ทราบว่าฉันได้แก้ไขไฟล์ที่มีชื่อเดียวกันrepo2
ซึ่งฉันควรจะเปลี่ยนrepo1
ไฟล์. ดังนั้นฉันจึงเปิดคำสั่งgit status
ต่อไปrepo1
และมันก็ยังคงให้ข้อความเหมือนเดิม
ในสาขาหลัก
ไม่มีอะไรให้กระทำไดเร็กทอรีการทำงานสะอาด
ครึ่งชั่วโมง. จากนั้นเพื่อนร่วมงานของฉันสังเกตว่ามันเป็นดวงตาคู่ที่เป็นอิสระและนำสิ่งนี้มาแจ้งให้ฉันทราบว่าฉันคิดผิด แต่ที่เก็บที่ดูคล้ายกันมาก ช่วงเวลาที่ฉันเปลี่ยนไปใช้repo1
Git เริ่มสังเกตเห็นไฟล์ที่เปลี่ยนแปลง
ไม่ใช่กรณีทั่วไป แต่คุณไม่มีทางรู้!
สิ่งนี้เกิดขึ้นบน Windows เมื่อเปลี่ยนไฟล์โดยการถ่ายโอนความแตกต่างผ่านเครื่องมือ WinMerge เห็นได้ชัดว่า WinMerge (อย่างน้อยก็วิธีกำหนดค่าบนคอมพิวเตอร์ของฉัน) บางครั้งก็ไม่อัปเดตการประทับเวลาของไฟล์ที่เปลี่ยนแปลง
ใน Windows สถานะคอมไพล์การใช้การประทับเวลาของไฟล์และการเปลี่ยนแปลงขนาดของไฟล์เพื่อพิจารณาว่าไฟล์มีการเปลี่ยนแปลงหรือไม่ ดังนั้นเนื่องจากการประทับเวลาไม่ได้รับการอัปเดตจึงมีเพียงขนาดไฟล์เท่านั้น แต่น่าเสียดายที่ไฟล์ในคำถามเป็นไฟล์รุ่นที่เรียบง่ายที่มีเนื้อหาเปลี่ยนจาก7.1.2ไป7.2.0 กล่าวอีกนัยหนึ่งขนาดไฟล์ยังคงไม่เปลี่ยนแปลง ไฟล์อื่น ๆ ที่ WinMerge เปลี่ยนแปลงเช่นกันและไม่ได้อัปเดตการประทับเวลา แต่มีขนาดแตกต่างกันหลังจากตรวจพบการเปลี่ยนแปลงโดยสถานะคอมไพล์ได้ดี
ผมมีปัญหาที่คล้ายกันในขณะที่ใช้Sublime Text-3 หลังจากทำการเปลี่ยนแปลงใหม่ในโค้ดและบันทึกแล้วเมื่อฉันลองใช้คำสั่ง git add ./status การตอบสนองคือ "branch-up to date" ฉันคิดว่าไม่ว่าจะบันทึกการอัปเดตในโปรแกรมแก้ไขข้อความไฟล์ก็ไม่เปลี่ยนแปลงจริงๆ การเปิดไฟล์ในโปรแกรมแก้ไขอื่นและบันทึกการเปลี่ยนแปลงได้ผลสำหรับฉัน
คุณย้ายไดเร็กทอรีออกจากภายใต้เชลล์ของคุณหรือไม่? สิ่งนี้อาจเกิดขึ้นได้หากคุณกู้คืนโปรเจ็กต์จากข้อมูลสำรอง ในการแก้ไขปัญหานี้ให้cd
ออกและกลับเข้ามา:
cd ../
cd -
โดยทั่วไปกับปัญหานี้ก่อนอื่นให้ตรวจสอบว่าคุณกำลังแก้ไขไฟล์ที่คุณคิดว่าเป็น! ฉันมีปัญหานี้เมื่อฉันแก้ไขไฟล์ JavaScript ที่ถูกแปลงแทนไฟล์ต้นฉบับ (เวอร์ชันที่โปร่งใสไม่ได้อยู่ภายใต้การควบคุมแหล่งที่มา)
ไคลเอนต์ Git ของฉัน (Gitg) ทำให้เกิดปัญหานี้สำหรับฉัน คำสั่งปกติที่ฉันมักจะเรียกใช้ไม่ได้ผล แม้แต่การแตะทุกไฟล์ในโครงการก็ไม่ได้ผล
ฉันพบวิธีแก้ไขแล้วและยังไม่แน่ใจว่าเกิดจากอะไร คัดลอกไดเรกทอรีโครงการของคุณ git status
ไฟล์ที่หายไปจะแสดงขึ้นมาในการคัดลอกไดเรกทอรี การเปลี่ยนชื่ออาจทำได้เหมือนกัน
พบปัญหา แต่มันเป็นเพียงสองไดเรกทอรีและฉันไม่รู้จักคือทั้งสองไดเรกทอรีเหล่านั้นถูกกำหนดค่าเป็นโมดูลย่อย git เกิดขึ้นได้อย่างไรฉันไม่มีเงื่อนงำ แต่กระบวนการนี้คือทำตามคำแนะนำบางอย่างในลิงค์นี้ แต่อย่าลบไดเรกทอรี (อย่างที่เขาทำในตอนท้าย) แต่ควรทำgit add path/to/dir
เมื่อคุณแก้ไขไฟล์ใน Visual Studio ไฟล์จะแสดงรายการในการเปลี่ยนแปลง git ทันทีแม้ว่าไฟล์จะไม่ได้บันทึกไว้ก็ตาม ดังนั้นสิ่งที่คุณต้องทำก็เพียงแค่บันทึกไฟล์ด้วยตนเอง (Ctrl + S สำหรับไฟล์ที่แสดงในปัจจุบันหรือ Ctrl + Shift + S สำหรับไฟล์โปรเจ็กต์ทั้งหมด) และ git bash จะเลือกไฟล์เหล่านั้น
.js
ไฟล์โดยทำงานกับ Visual Studio Code ขอบคุณ.
คุณพยายามอัปโหลดไฟล์ประเภทใด ตอนนี้ฉันใช้เวลาเกือบหนึ่งชั่วโมงในการอัปโหลดการแก้ไข css ของฉัน แต่ css นี้คอมไพล์จากไฟล์สไตล์ดังนั้น git จึงไม่สนใจมัน เมื่อฉันเปลี่ยนแหล่งที่มาของสไตล์แล้วทุกอย่างก็ใช้ได้
หวังว่าจะช่วยได้
บางครั้งขึ้นอยู่กับเวอร์ชัน git และหากคุณลืมทำ git add .
บางครั้งขึ้นอยู่กับรุ่นและคอมไพล์และหากคุณลืมที่จะทำ
หากต้องการตรวจสอบเกี่ยวกับการเปลี่ยนแปลงของคุณในการใช้ที่เก็บข้อมูลเสมอgit status
ซึ่งจะแสดงไฟล์ที่ไม่ได้ติดตามและถูกเปลี่ยนแปลงทั้งหมด เพราะgit diff
แสดงเฉพาะไฟล์ที่เพิ่ม
ตรวจสอบให้แน่ใจไม่ได้ที่จะสร้าง symlinks (ln -s source dest
) จากด้านในของ Git Bash สำหรับ Windows
ไม่สร้าง symlink แต่ทำสำเนา DEEP ของแหล่งที่มาไปยังปลายทาง
ฉันพบพฤติกรรมเดียวกันกับ OP บนเทอร์มินัล MINGW64 จาก Git Bash สำหรับ Windows (เวอร์ชัน 2.16.2) เพื่อให้ทราบว่าการเปลี่ยนแปลงที่ 'แก้ไข' ของฉันอยู่ในไดเร็กทอรีดั้งเดิมและคำสั่ง git bash ของฉันมาจากภายในสำเนาลึกที่ยังคงอยู่ ไม่เปลี่ยนแปลง
ผมมีปัญหาเหมือนกัน. ปรากฎว่าฉันมีสำเนาของโครงการสองชุดและเครื่องปลายทางของฉันอยู่ในโฟลเดอร์โครงการที่ไม่ถูกต้อง!
สำหรับฉันเช่นกันฉันลองใช้วิธีการดังกล่าวข้างต้นแล้วและไม่มีอะไรช่วย จากนั้นวิธีแก้ไขคือเปลี่ยนไฟล์ผ่านเทอร์มินัลไม่ใช่ GUI ฉันไม่รู้ว่าทำไมถึงได้ผล แต่ได้ผล หลังจากที่ฉันแก้ไขไฟล์ผ่าน nano จากเทอร์มินัล git จำได้ว่ามีการเปลี่ยนแปลงและฉันสามารถเพิ่มและคอมมิตได้
ฉันมีปัญหาเดียวกันที่นี่ VS2015 ไม่รู้จักการเปลี่ยนแปลงไฟล์ js ของฉันการลบรีโมตออกจากการตั้งค่าที่เก็บแล้วเพิ่มเส้นทาง URL ระยะไกลอีกครั้งช่วยแก้ปัญหาของฉันได้
ฉันมีปัญหาคล้ายกันเมื่อฉันสร้างไฟล์แพตช์ในเซิร์ฟเวอร์ด้วยตัวแก้ไข vi ดูเหมือนว่าปัญหาเกิดจากการเว้นวรรค เมื่อฉันพุชแพตช์จากโลคัลการปรับใช้ก็เหมาะสม
ฉันมีปัญหานี้ ของฉันใช้งานไม่ได้เพราะฉันวางไฟล์ไว้ในโฟลเดอร์. git ภายในโปรเจ็กต์ของฉัน
ในกรณีของฉันกำลังgit reset --hard
ลบไฟล์และปล่อยให้โฟลเดอร์ว่างบางส่วน หลังจากตรวจสอบเนื้อหาแล้วฉันสังเกตเห็นว่าไดเรกทอรีว่างเปล่า
อย่างไรก็ตาม git จะละเว้นโฟลเดอร์ว่าง (การแก้ไขคอมไพล์ละเว้นไดเร็กทอรีทั้งหมดในขณะที่ติดตามเนื้อหาโฟลเดอร์ว่างไม่ใช่เนื้อหา)
พยายามที่จะใช้git add *
แล้วgit commit