มีสามที่ที่ไฟล์สามารถพูดได้ - ต้นไม้ดัชนีและสำเนาการทำงาน เมื่อคุณเพิ่มไฟล์ลงในโฟลเดอร์คุณกำลังเพิ่มไฟล์ลงในสำเนาที่ใช้งานได้
เมื่อคุณทำบางสิ่งเช่นgit add fileคุณเพิ่มลงในดัชนี และเมื่อคุณส่งมอบคุณจะเพิ่มเข้าไปในต้นไม้เช่นกัน
มันอาจจะช่วยให้คุณรู้จักการตั้งค่าสถานะทั่วไปอีกสามค่าในการรีเซ็ต git
รีเซ็ต git [- <mode>] [ <commit>]
แบบฟอร์มนี้ตั้งค่าส่วนหัวสาขาปัจจุบันเป็น<commit>และอาจปรับปรุงดัชนี (รีเซ็ตเป็นต้นไม้ของ<commit>) และแผนผังการทำงานขึ้นอยู่กับ<mode>ซึ่งต้องเป็นหนึ่งในสิ่งต่อไปนี้: -
soft
ห้ามแตะไฟล์ดัชนีหรือแผนผังการทำงานเลย (แต่จะรีเซ็ตส่วนหัวเป็น<commit>เหมือนทุกโหมดที่ทำได้) สิ่งนี้จะทำให้ไฟล์ที่ถูกเปลี่ยนแปลงทั้งหมดของคุณ "การเปลี่ยนแปลงที่จะเกิดขึ้น" เนื่องจากสถานะ git จะถูกใส่เข้าไป
--mixed
รีเซ็ตดัชนี แต่ไม่ใช่แผนผังการทำงาน (เช่นไฟล์ที่ถูกเปลี่ยนแปลงจะถูกเก็บไว้ แต่ไม่ได้ทำเครื่องหมายเพื่อยอมรับ) และรายงานสิ่งที่ยังไม่ได้รับการปรับปรุง นี่คือการกระทำเริ่มต้น
--hard
รีเซ็ตดัชนีและแผนผังการทำงาน การเปลี่ยนแปลงใด ๆ กับไฟล์ที่ถูกติดตามในแผนผังการทำงานตั้งแต่<commit>ถูกยกเลิก
ตอนนี้เมื่อคุณทำสิ่งที่ชอบgit reset HEAD- สิ่งที่คุณกำลังทำอยู่จริงgit reset HEAD --mixedและมันจะ "รีเซ็ต" ดัชนีเป็นสถานะก่อนที่คุณจะเริ่มเพิ่มไฟล์ / เพิ่มการแก้ไขดัชนี (ผ่านgit add) ในกรณีนี้สำเนาการทำงานและ index (หรือ staging) ซิงค์กันแล้ว แต่คุณทำให้ HEAD และดัชนีตรงกันเมื่อทำการรีเซ็ต
git rmในทางกลับกันจะลบไฟล์ออกจากไดเรกทอรีการทำงานและดัชนีและเมื่อคุณส่งไฟล์จะถูกลบออกจากทรีเช่นกัน git rm --cachedอย่างไรก็ตามจะลบไฟล์ออกจากดัชนีเพียงอย่างเดียวและเก็บไว้ในสำเนาการทำงานของคุณ นี่คือสิ่งที่ตรงกันข้ามgit add file ในกรณีนี้คุณสร้างดัชนีให้แตกต่างจาก HEAD และการทำงานโดยที่ HEAD มีไฟล์เวอร์ชันที่คอมมิทไว้ก่อนหน้านี้สำเนาการทำงานมีการแก้ไขครั้งล่าสุดหากเนื้อหาใด ๆ หรือจาก HEAD ของ ไฟล์และคุณลบไฟล์ออกจากดัชนี การคอมมิทจะซิงค์ดัชนีและแผนผังและไฟล์จะถูกลบ
git rm --cachedgit diffgit diff --cachedgit statusUntracked