บน SVN การลบบางสิ่งออกจากระบบไฟล์โดยตรง (แทนที่จะใช้ svn) สร้างอาการปวดหัว
ฉันไม่ได้พบสิ่งนี้เป็นปัญหาเมื่อใช้gitแต่ฉันสังเกตเห็นว่าคอมไพล์มีrmการใช้งานของตัวเอง( git rm)
ความแตกต่างระหว่างrmและgit rmคืออะไร?
บน SVN การลบบางสิ่งออกจากระบบไฟล์โดยตรง (แทนที่จะใช้ svn) สร้างอาการปวดหัว
ฉันไม่ได้พบสิ่งนี้เป็นปัญหาเมื่อใช้gitแต่ฉันสังเกตเห็นว่าคอมไพล์มีrmการใช้งานของตัวเอง( git rm)
ความแตกต่างระหว่างrmและgit rmคืออะไร?
คำตอบ:
หากคุณเพียงแค่ใช้คุณจะต้องทำตามมันขึ้นกับ rm ทำสิ่งนี้ในขั้นตอนเดียวgit add <fileRemoved>git rm
นอกจากนี้คุณยังสามารถใช้git rm --cachedซึ่งจะลบไฟล์ออกจากดัชนี (การจัดเตรียมเพื่อการลบในการส่งครั้งต่อไป) แต่เก็บสำเนาของคุณไว้ในระบบไฟล์โลคอล
rm(แทนgit rm) และลบไฟล์จำนวนมากที่ใช้มันและตอนนี้ไม่ต้องการgitติดตามไฟล์เหล่านั้น มีวิธีในการคืนค่าการเปลี่ยนแปลงหรือไม่ ฉันต้องการgitเหยียบของฉันrmถูกลบเนื่องจากฉันไม่ได้ใช้git rmตั้งแต่แรก
การลบไฟล์โดยใช้rmไม่ใช่ปัญหาต่อ se แต่ถ้าคุณต้องการยอมรับว่าไฟล์นั้นถูกลบคุณจะต้องทำสิ่งgit rmต่อไปดังนั้นคุณอาจทำเช่นนั้นในทันที
นอกจากนี้ขึ้นอยู่กับเชลล์ของคุณgit rmหลังจากลบไฟล์ออกไปแล้วคุณจะไม่ได้รับการทำแท็บเสร็จสิ้นดังนั้นคุณจะต้องสะกดเส้นทางด้วยตนเองในขณะที่ถ้าคุณgit rmยังมีไฟล์อยู่การทำแท็บจะทำงานได้ตามปกติ
git rmจะลบไฟล์ออกจากดัชนีและไดเรกทอรีทำงาน (เฉพาะดัชนีถ้าคุณใช้--cached) เพื่อให้การลบถูกจัดฉากสำหรับการส่งครั้งต่อไป
อย่างไรก็ตามหากคุณใช้ rm แทน git rm คุณสามารถข้ามการเพิ่มคอมไพล์และยอมรับการเปลี่ยนแปลงโดยตรงโดยใช้:
git commit -a
ลบไฟล์ออกจากดัชนีหรือจากแผนผังการทำงานและดัชนี 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
เมื่อใช้ git rm การลบจะเป็นส่วนหนึ่งของการคอมมิทครั้งต่อไปของคุณ ดังนั้นหากคุณต้องการผลักดันการเปลี่ยนแปลงคุณควรใช้ git rm
เมื่อเพิ่มคำตอบของ Andy มีประโยชน์เพิ่มเติมสำหรับgit rm:
ความปลอดภัย : เมื่อทำgit rmแทนrmGit จะบล็อกการลบหากมีความแตกต่างระหว่างHEADเวอร์ชันของไฟล์และดัชนี staging หรือเวอร์ชันต้นไม้ทำงาน บล็อกนี้เป็นกลไกความปลอดภัยเพื่อป้องกันการลบการเปลี่ยนแปลงที่กำลังดำเนินอยู่
การปกป้อง : git rm --dry-run. ตัวเลือกนี้เป็นระบบป้องกันที่จะเรียกใช้git rmคำสั่ง แต่ไม่ลบไฟล์ แต่จะส่งออกไฟล์ที่จะลบ
git reset --hardแล้วชำระเงินหลักเพื่อออกจากสถานะผู้นำเดี่ยวเนื่องจากฉันรู้ว่าฉันไม่มีการเปลี่ยนแปลงใด ๆ หากคุณไม่ได้ยืนยันการเปลี่ยนแปลงคุณอาจต้องการซ่อนคอมไพล์ แต่ฉันค่อนข้างใหม่กับคอมไพล์ดังนั้นฉันไม่รู้คำสั่งที่แน่นอน หากคุณมาที่นี่ในปี 2014 หรือหลังฉันหวังว่าคำตอบนี้จะเป็นประโยชน์กับคุณ