เลิกทำ“ git add <dir>” หรือไม่


186

ฉันเพิ่มไฟล์ผิดโดยใช้คำสั่ง "git add dir" ฉันยังไม่ได้เรียกใช้ "คอมมิทคอม" มีวิธีลบ dir นี้และทุกอย่างที่มีอยู่ภายในจากการกระทำหรือไม่

ฉันลองgit reset dirแล้ว แต่มันไม่ทำงาน เห็นได้ชัดว่าgit reset fileเป็นวิธีการยกเลิก แต่ฉันมีไฟล์จำนวนมากและมีเวลาน้อยมาก


6
git reset <path>อัพเดตดัชนีสำหรับเส้นทางนั้นเพื่อให้ตรงกับHEAD(การกระทำปัจจุบัน) มันไม่ได้สัมผัสต้นไม้ทำงาน
Cascabel

คำตอบ:


279

ในการลบไดเรกทอรีและทุกสิ่งที่อยู่ในไดเรกทอรีออกจากดัชนี

git rm --cached -r dir

--cachedสวิทช์ทำให้git rmทำงานในดัชนีเท่านั้นและไม่ได้สัมผัสสำเนาทำงาน -rสวิทช์ทำให้ recursive


12
"ในการลบไดเรกทอรีที่จัดฉากทั้งหมดออกจากดัชนี" จะเป็นคำอธิบายที่ดีขึ้นเล็กน้อยของคำสั่ง git เนื่องจากสำหรับผู้เริ่มต้น git เช่นฉันคำสั่งจะดูเป็นอย่างมากถ้ามันสามารถลบไดเรกทอรีในระบบไฟล์ได้ แค่เรื่องของรสนิยม
Sascha Gottfried

1
นั่นคือเหตุผลที่ฉัน--cachedเปลี่ยนสวิตช์เป็นตัวหนา อย่างไรก็ตามฉันได้แก้ไขคำตอบเพื่อให้มีคุณสมบัติที่ตรงกับดัชนีเท่านั้น
อริสโตเติล Pagaltzis

@SaschaGottfried ขอบคุณสำหรับความกระจ่างฉันกลัวในตอนแรกแม้จะมีการแก้ไข แต่ความคิดเห็นของคุณทำให้มันชัดเจน :)
Max von Hippel

ฉันเกือบจะลบโฟลเดอร์ทั้งหมดของฉัน: S หลังจากนี้ ... ทำgit reset HEAD folderทุกอย่างคงที่ ... แต่ก่อนที่จะทำสิ่งนี้ให้ทำgit status folderและให้แน่ใจว่ามันบอกว่ามัน 'ลบ' ไฟล์ทั้งหมดในโฟลเดอร์นั้น
Bengalaa

21

git rm --cached -r <dir>คุณจะต้องการใช้ คำสั่งนี้จะลบเนื้อหาไดเรกทอรีที่จัดฉากออกจากดัชนี

หากไดเรกทอรีนั้นถูกติดตามแล้วคุณต้องค้นหาไฟล์ทั้งเก่าและใหม่ด้วยตนเองและยกเลิกการทำขั้นตอนเหล่านั้น ...

อาจทำงานgit reset <dir>หลังจากนั้นเพื่อรีเซ็ตไฟล์ (และที่ติดตามแล้ว) ที่มีอยู่ในไดเรกทอรี


อัปเดต 2019:

เพียงเรียกใช้git reset directoryมันจะเป็นการหยุดการทำงานของไฟล์ที่เพิ่มใหม่ทั้งหมด


ยังไม่git reset <dir>พอหรอกเหรอ?
Bananach

@Bananach ฉันลองแล้วดูเหมือนว่าใช่git reset <dir>ก็ใช้ได้เหมือนกัน คำตอบคือจาก 2011 ดังนั้นฉันไม่แน่ใจว่าที่ทำงาน 8 ปีแล้ว ฉันจะอัปเดตคำตอบ ขอบคุณสำหรับคำใบ้!
knittl


11

ไดเรกทอรี Unstage

$ git reset <dir>

เลิกทำไฟล์และโฟลเดอร์ทั้งหมดที่ฉันจัดฉากด้วย:

$ git add <dir>

ยืนยันไดเรกทอรีที่ไม่มีการจัดฉาก

เพื่อยืนยันการลบไดเรกทอรีและเนื้อหาจากการแสดงละคร (เช่น "การเปลี่ยนแปลงที่จะเกิดขึ้น") ให้เรียกใช้ด้านล่าง:

$ git status

หรือ

$ git diff --staged --name-only 

เพื่อยืนยันว่าไม่มีโฟลเดอร์หรือไฟล์ใดที่จัดฉากก่อนหน้านี้ยังคงถูกจัดฉาก


2

หนึ่งคำสั่งง่ายๆในการลบฉากไฟล์ / โฟลเดอร์ที่มีความมุ่งมั่นที่ยังไม่เป็น git restore --staged <dir>-

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.