การลบไฟล์โดยใช้ Git / GitHub


115

ก่อนอื่นฉันเพิ่งเริ่มใช้ Git

ฉันลบไฟล์จำนวนมากในเครื่อง Mac โดยใช้ Finder ฉันต้องการให้ไฟล์ที่ฉันลบไปไม่แสดงในสาขาปัจจุบันอีกต่อไป แต่เป็นเช่นนั้น

ผู้ใช้ Git รู้คำสั่งในการอัปเดตดัชนีหรือไม่?


คำตอบ:


226

ฉันคิดว่านี่จะเป็นวิธีที่ง่ายกว่าในการทำสิ่งที่คุณต้องการ:

git add . -A 

จากนั้นคุณจะทำ:

git commit -m "removed some files"

ตามที่ระบุไว้ข้างต้น.


ขอบคุณ. และฉันเพิ่งเขียนนามแฝงbashเพื่อทำข้างต้น น่าอัศจรรย์
Zack

12
แฟล็ก -A ทำหน้าที่อะไร
Kim Prince

1
@KimPrince - อ้างอิงจากkernel.org "-A --all Like -u แต่จับคู่ <filepattern> กับไฟล์ในแผนผังการทำงานนอกเหนือจากดัชนีนั่นหมายความว่าจะพบไฟล์ใหม่เช่นเดียวกับการจัดเตรียมเนื้อหาที่แก้ไข และลบไฟล์ที่ไม่ได้อยู่ในโครงสร้างการทำงานอีกต่อไป "
j08691

3
@KimPrince git help addจะบอกคุณว่า-Aหมายถึงอะไรและแสดงรายการสวิตช์อื่น ๆ ทั้งหมดด้วย
Marcin Orlowski

1
สิ่งนี้ทำได้มากกว่าการลบไฟล์ที่ถูกลบ เพิ่มไฟล์ทั้งหมดที่มีการเปลี่ยนแปลงในไดเร็กทอรีดังนั้นนี่ไม่ใช่คำตอบที่น่าพอใจจริงๆ
Alex

19

คุณสามารถดูไฟล์ที่ถูกลบซึ่งยังคง 'ติดตาม' ด้วย:

git ls-files --deleted

หากต้องการลบไฟล์จากสาขาคุณสามารถดำเนินการดังนี้:

git ls-files --deleted -z | xargs -0 git rm

จากman git-rm:

ลบไฟล์ออกจากดัชนีหรือจากโครงสร้างการทำงานและดัชนี git-rm จะไม่ลบไฟล์ออกจากไดเร็กทอรีการทำงานของคุณ (ไม่มีตัวเลือกในการลบไฟล์ 13 ออกจากโครงสร้างงานเท่านั้น แต่ยังเก็บไว้ในดัชนีใช้ / bin / rm หากคุณต้องการทำเช่นนั้น)

สุดท้ายในการดำเนินการ "ลบ" ให้ทำสิ่งต่อไปนี้

git commit -m "removed some files"

จากนั้นคุณต้องยอมรับการเปลี่ยนแปลง -git commit -m "removed some files"
James Polley

17

ฉันไม่รู้ว่าสิ่งนี้ถูกเพิ่มใน git ตั้งแต่คำตอบก่อนหน้านี้หรือไม่ แต่ฉันเพิ่งใช้

git add -u
git commit -m "Removed some files"

เพื่อให้บรรลุสิ่งเดียวกัน


สิ่งนี้ใช้ได้กับกรณีการใช้งานที่ระบุไว้ แต่ไม่เพียงเพิ่มการลบไฟล์ มันจะเพิ่มไฟล์ทั้งหมดที่มีการเปลี่ยนแปลงใด ๆ ดังนั้นโดยทั่วไปแล้วนี่ไม่ใช่วิธีที่ดีในการลบไฟล์ที่ถูกลบทั้งหมดเว้นแต่จะเป็นการเปลี่ยนแปลงเดียวที่คุณได้ทำ
Alex

2
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch deletefile.name' --prune-empty --tag-name-filter cat -- --all
git commit -m "Removed deletefile.name"
git push origin master --force

แทนที่ deleteefile.name ด้วยไฟล์ที่จะลบ สำหรับคำอธิบายโดยละเอียดในเชิงลึกโปรดอ่านบทความดีๆhttps://help.github.com/articles/remove-sensitive-data

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