มีสามที่ที่ไฟล์สามารถพูดได้ - ต้นไม้ดัชนีและสำเนาการทำงาน เมื่อคุณเพิ่มไฟล์ลงในโฟลเดอร์คุณกำลังเพิ่มไฟล์ลงในสำเนาที่ใช้งานได้
เมื่อคุณทำบางสิ่งเช่น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 --cached
git diff
git diff --cached
git status
Untracked