เมื่อคุณทำงานในโครงการด้วยตัวเองหรือเป็นส่วนหนึ่งของทีม อาจมีบางกรณีที่คุณต้องการเลิกทำการคอมมิต git reset
คำสั่งเป็นหนึ่งในเครื่องมือที่รู้จักว่าเป็นเครื่องช่วยชีวิตที่แท้จริง
กลไกการติดตามของ Git
ก่อนไปที่ git reset
เราต้องเข้าใจโครงสร้างพื้นฐานของ git Git จัดการและติดตามไฟล์ ผ่านโครงสร้างแบบต้นไม้ที่มีโหนดและพอยน์เตอร์
โดยทั่วไปมี "ทรี" เหล่านี้อยู่สามรายการในที่เก็บ git ในพื้นที่ของคุณ:
- ไดเรกทอรีการทำงาน :หรือแผนผังการทำงาน และอ้างอิงถึงไดเร็กทอรีในเครื่องของคุณและ
git status
จะให้สถานะของไดเร็กทอรีการทำงานของคุณ - หัวหน้า :เป็นเพียงสแนปชอตการคอมมิตสุดท้ายของสาขาปัจจุบันของคุณ หากคุณจะเปลี่ยนสาขาด้วย
git checkout
จากนั้น HEAD จะเปลี่ยนเป็นการคอมมิทสุดท้ายบนแบรนช์ - ดัชนี :หรือ การแสดงละคร พื้นที่. ดังนั้นเมื่อคุณ
git add
ไฟล์ที่จะส่งจะเพิ่มลงในดัชนีนี้
เวิร์กโฟลว์ Git
ตัวอย่างต่อไปนี้แสดงการเปลี่ยนแปลงไฟล์แล้วเพิ่มลงในดัชนี (staging) โดยใช้ git add
แล้วตรวจสอบ git status
เพื่อดูการเปลี่ยนแปลงที่จะเกิดขึ้น
ตอนนี้เมื่อเราทำ git commit
มันบันทึกเป็นสแนปชอตที่ถาวรมากขึ้นและอัปเดตต้นแบบและ HEAD ไปยังตัวชี้นั้น ดังนั้นถ้าเราทำ git status
หลังจาก git commit
เราจะเห็นว่าต้นไม้ทั้งสามอยู่ในสภาพเดียวกัน (จะไม่มีอะไรทำ)
แล้วจุดประสงค์ของ . คืออะไร รีเซ็ต git ?
คุณอาจสงสัยว่าทำไมคำนำทั้งหมดนี้เพียงเพื่อไปที่ git reset
. ก็ git reset
จัดการต้นไม้เหล่านี้ด้วยวิธีต่างๆ ดังนั้นการรีเซ็ต git จะยอมรับตัวเลือกที่หลากหลายขึ้นอยู่กับสิ่งที่คุณต้องการทำ
โหมดรีเซ็ต Git
สมมติว่าเราส่งการเปลี่ยนแปลงและไฟล์บางอย่าง แล้วตระหนักว่าเราส่งมันไปยังสาขาที่ไม่ถูกต้อง หรือการคอมมิชชันของเรามีปัญหา เราจึงต้องการย้อนกลับ นี่คือที่ที่รู้เกี่ยวกับการรีเซ็ต git โหมด มีประโยชน์
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
การรีเซ็ต git ทั้งหมดด้วยโหมดจะอัปเดตตัวชี้ HEAD มีรูปแบบดังนี้
git reset <mode> <commit-optional>
โหมดหลักคือ:
--soft
:รีเซ็ตตัวชี้ HEAD และปล่อยให้ดัชนีและไดเร็กทอรีการทำงานไม่ถูกแตะต้อง ดังนั้น HEAD ของคุณจะถูกรีเซ็ตและต้นไม้อื่นๆ ยังคงแสดงการเปลี่ยนแปลงล่าสุด--mixed
:ค่าเริ่มต้น ตัวเลือก. รีเซ็ต HEAD และดัชนี โดยพื้นฐานแล้วสิ่งนี้จะยกเลิกการเปลี่ยนแปลงทั้งหมดของคุณและทิ้งคุณไว้ก่อนที่คุณจะทำgit add
. หมายเหตุ: หากคุณทำการรีเซ็ต git ด้วยตัวเองโดยไม่มีตัวเลือกใดๆ มันจะถูกตีความว่าเป็นgit reset --mixed
.--hard
:ระวังอันนี้ด้วย . นอกจากการรีเซ็ต HEAD, index แล้ว ยังรีเซ็ตไดเร็กทอรีการทำงานของคุณอีกด้วย ดังนั้นคุณอาจสูญเสียรหัสที่เขียนไป! นี่เป็นการเปลี่ยนแปลงหลังจากตัวชี้ HEAD ปัจจุบัน (การคอมมิตล่าสุด) ถูกยกเลิก
โหมดอื่นๆ เช่น --merge
และ --keep
สามารถอ่านได้ในเอกสารอย่างเป็นทางการ
มีประโยชน์ รีเซ็ต git เคล็ดลับ
ย้อนกลับการคอมมิต
จำไว้ว่าถ้าเราละเว้นโหมด (การรีเซ็ต git โดยไม่มีตัวเลือกใด ๆ ) มันจะถูกตีความว่าเป็น –mixed
ตอนนี้ถ้าเราแค่พิมพ์ git reset HEAD
จะไม่มีอะไรเกิดขึ้น แต่ถ้าเราทำ git reset HEAD~1
จากนั้น HEAD ของเราจะชี้ไปที่การคอมมิทครั้งก่อน
ตัวอย่างต่อไปนี้ต่อจากตัวอย่างก่อนหน้า สมมติว่าเราเพิ่มข้อความใหม่ลงในไฟล์ตัวอย่างของเรา จากนั้นเรา git add และ commit หลังจากที่เราทำการ git reset HEAD~1 แล้ว การเปลี่ยนแปลงทั้งหมดของเราจะไม่ถูกจัดฉากและเป็นการคอมมิตครั้งก่อน
นี่เป็นวิธีที่มีประโยชน์และรวดเร็วเมื่อเราต้องการเลิกทำการคอมมิต!
ยกเลิกการจัดเตรียมไฟล์เฉพาะ
สมมติว่าคุณเพิ่มไฟล์ลงในดัชนีด้วย git add เราสามารถลบไฟล์นั้นได้โดยทำ:
git reset HEAD <file-name>
สถานการณ์:ฉันทำให้โค้ดของฉันยุ่งเหยิง! ฉันสามารถย้อนกลับไปตอนที่มันใช้งานได้หรือไม่
หากคุณต้องการทิ้งการเปลี่ยนแปลงในเครื่องทั้งหมดและกลับไปใช้การกระทำก่อนหน้าของคุณ วิธีสุดท้ายคือ git reset --hard
.
บ่อยครั้งถ้าคุณทำลายรหัสของคุณ นี่อาจเป็นตัวเลือกเดียวของคุณ หากคุณรู้จักคอมมิทแฮช คุณสามารถ do git reset --hard <commit>
. แต่โปรดทราบว่าข้อนี้จะส่งผลต่อการคอมมิตอื่นๆ หลังจากการคอมมิตเฉพาะ (ถ้ามี) ด้วย!
สถานการณ์:การคอมมิตนี้ควรจะอยู่ในสาขาใหม่!
สิ่งนี้มักเกิดขึ้น โดยเฉพาะเมื่อคุณเริ่มทำงานในการผลิต หากสิ่งนี้เกิดขึ้นกับคุณ ไม่ต้องตกใจ!
สิ่งที่เราต้องทำคือสร้างสาขาใหม่ที่มีสถานะของสาขาที่เราจำเป็นต้องกรอกลับ จากนั้นเราจะรีเซ็ตสาขาที่ได้รับผลกระทบ จากนั้นจึงชำระเงินไปยังสาขาใหม่และทำคอมมิตที่นั่น:
git branch new-branch
git reset HEAD~1 --hard
git checkout new-branch
เครื่องช่วยชีวิต ขวา!
หนึ่งคำสุดท้าย
ระวังเมื่อทำ git reset --hard
และเมื่อกรอกลับไปยังคอมมิตเฉพาะ โดยเฉพาะอย่างยิ่งในโค้ดที่ใช้งานจริงและเมื่อคุณทำงานกับนักพัฒนารายอื่น บ่อยครั้งที่ git revert เป็นวิธีที่ปลอดภัยในการเปลี่ยนแปลงเหล่านี้ แต่นั่นเป็นการสนทนาอีกครั้ง จนกระทั่ง! 👋🏼