เหตุใดจึงใช้ 'git rm' เพื่อลบไฟล์แทน 'rm'


171

บน SVN การลบบางสิ่งออกจากระบบไฟล์โดยตรง (แทนที่จะใช้ svn) สร้างอาการปวดหัว

ฉันไม่ได้พบสิ่งนี้เป็นปัญหาเมื่อใช้gitแต่ฉันสังเกตเห็นว่าคอมไพล์มีrmการใช้งานของตัวเอง( git rm)

ความแตกต่างระหว่างrmและgit rmคืออะไร?

คำตอบ:


253

หากคุณเพียงแค่ใช้คุณจะต้องทำตามมันขึ้นกับ rm ทำสิ่งนี้ในขั้นตอนเดียวgit add <fileRemoved>git rm

นอกจากนี้คุณยังสามารถใช้git rm --cachedซึ่งจะลบไฟล์ออกจากดัชนี (การจัดเตรียมเพื่อการลบในการส่งครั้งต่อไป) แต่เก็บสำเนาของคุณไว้ในระบบไฟล์โลคอล


คำตอบที่ดี. ฉันสามารถใช้งานได้git reset --hardแล้วชำระเงินหลักเพื่อออกจากสถานะผู้นำเดี่ยวเนื่องจากฉันรู้ว่าฉันไม่มีการเปลี่ยนแปลงใด ๆ หากคุณไม่ได้ยืนยันการเปลี่ยนแปลงคุณอาจต้องการซ่อนคอมไพล์ แต่ฉันค่อนข้างใหม่กับคอมไพล์ดังนั้นฉันไม่รู้คำสั่งที่แน่นอน หากคุณมาที่นี่ในปี 2014 หรือหลังฉันหวังว่าคำตอบนี้จะเป็นประโยชน์กับคุณ
Eric Hepperle - CodeSlayer2010

@Andy - ถ้าฉันใช้rm(แทนgit rm) และลบไฟล์จำนวนมากที่ใช้มันและตอนนี้ไม่ต้องการgitติดตามไฟล์เหล่านั้น มีวิธีในการคืนค่าการเปลี่ยนแปลงหรือไม่ ฉันต้องการgitเหยียบของฉันrmถูกลบเนื่องจากฉันไม่ได้ใช้git rmตั้งแต่แรก
Chetan Arvind Patil

มันจะดีถ้ามีการสะกดอย่างชัดเจนในเอกสารออนไลน์ (อาจมี แต่ชัดเจนไม่ชัดเจนหรือคำถามนี้ไม่ได้รับการถาม) มันจะดีสำหรับผู้ใช้ที่จะรู้ว่าพวกเขาไม่ได้ทำอะไรผิดถ้าพวกเขาไปที่เส้นทาง OS rm และมีเหตุผลที่จะไปเส้นทาง OS เช่นถ้าคุณต้องการลบไฟล์เพื่อทดสอบว่ามีบางสิ่งทำงานก่อนที่จะยอมรับการเปลี่ยนแปลงเส้นทางของระบบปฏิบัติการนั้นปลอดภัยกว่าการใช้ git rm เล็กน้อยเช่นเดียวกับในกรณี git ที่คุณต้องหยุดการทำงานในขณะที่ตัวเลือก OS คุณมี เพื่อดึงข้อมูล (ฉันเชื่อ)
บ๊อบ

12

การลบไฟล์โดยใช้rmไม่ใช่ปัญหาต่อ se แต่ถ้าคุณต้องการยอมรับว่าไฟล์นั้นถูกลบคุณจะต้องทำสิ่งgit rmต่อไปดังนั้นคุณอาจทำเช่นนั้นในทันที

นอกจากนี้ขึ้นอยู่กับเชลล์ของคุณgit rmหลังจากลบไฟล์ออกไปแล้วคุณจะไม่ได้รับการทำแท็บเสร็จสิ้นดังนั้นคุณจะต้องสะกดเส้นทางด้วยตนเองในขณะที่ถ้าคุณgit rmยังมีไฟล์อยู่การทำแท็บจะทำงานได้ตามปกติ


7

git rmจะลบไฟล์ออกจากดัชนีและไดเรกทอรีทำงาน (เฉพาะดัชนีถ้าคุณใช้--cached) เพื่อให้การลบถูกจัดฉากสำหรับการส่งครั้งต่อไป


4

อย่างไรก็ตามหากคุณใช้ rm แทน git rm คุณสามารถข้ามการเพิ่มคอมไพล์และยอมรับการเปลี่ยนแปลงโดยตรงโดยใช้:

git commit -a


3

ลบไฟล์ออกจากดัชนีหรือจากแผนผังการทำงานและดัชนี git rm จะไม่ลบไฟล์ออกจากไดเรกทอรีการทำงานของคุณ

นี่คือวิธีที่คุณอาจลบไฟล์โดยใช้rm -fแล้วลบออกจากดัชนีของคุณด้วยgit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

อย่างไรก็ตามคุณสามารถทำได้ทั้งหมดในครั้งเดียวด้วยเพียงแค่ git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html

2

เมื่อใช้ git rm การลบจะเป็นส่วนหนึ่งของการคอมมิทครั้งต่อไปของคุณ ดังนั้นหากคุณต้องการผลักดันการเปลี่ยนแปลงคุณควรใช้ git rm


2

เมื่อเพิ่มคำตอบของ Andy มีประโยชน์เพิ่มเติมสำหรับgit rm:

  1. ความปลอดภัย : เมื่อทำgit rmแทนrmGit จะบล็อกการลบหากมีความแตกต่างระหว่างHEADเวอร์ชันของไฟล์และดัชนี staging หรือเวอร์ชันต้นไม้ทำงาน บล็อกนี้เป็นกลไกความปลอดภัยเพื่อป้องกันการลบการเปลี่ยนแปลงที่กำลังดำเนินอยู่

  2. การปกป้อง : git rm --dry-run. ตัวเลือกนี้เป็นระบบป้องกันที่จะเรียกใช้git rmคำสั่ง แต่ไม่ลบไฟล์ แต่จะส่งออกไฟล์ที่จะลบ

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