Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

Git รีเซ็ตเป็นกู้ภัย

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

กลไกการติดตามของ Git

ก่อนไปที่ git reset เราต้องเข้าใจโครงสร้างพื้นฐานของ git Git จัดการและติดตามไฟล์ ผ่านโครงสร้างแบบต้นไม้ที่มีโหนดและพอยน์เตอร์

โดยทั่วไปมี "ทรี" เหล่านี้อยู่สามรายการในที่เก็บ git ในพื้นที่ของคุณ:

  1. ไดเรกทอรีการทำงาน :หรือแผนผังการทำงาน และอ้างอิงถึงไดเร็กทอรีในเครื่องของคุณและ git status จะให้สถานะของไดเร็กทอรีการทำงานของคุณ
  2. หัวหน้า :เป็นเพียงสแนปชอตการคอมมิตสุดท้ายของสาขาปัจจุบันของคุณ หากคุณจะเปลี่ยนสาขาด้วย git checkout จากนั้น HEAD จะเปลี่ยนเป็นการคอมมิทสุดท้ายบนแบรนช์
  3. ดัชนี :หรือ การแสดงละคร พื้นที่. ดังนั้นเมื่อคุณ git add ไฟล์ที่จะส่งจะเพิ่มลงในดัชนีนี้

เวิร์กโฟลว์ Git

ตัวอย่างต่อไปนี้แสดงการเปลี่ยนแปลงไฟล์แล้วเพิ่มลงในดัชนี (staging) โดยใช้ git add แล้วตรวจสอบ git status เพื่อดูการเปลี่ยนแปลงที่จะเกิดขึ้น

Git รีเซ็ตเป็นกู้ภัย

ตอนนี้เมื่อเราทำ git commit มันบันทึกเป็นสแนปชอตที่ถาวรมากขึ้นและอัปเดตต้นแบบและ HEAD ไปยังตัวชี้นั้น ดังนั้นถ้าเราทำ git status หลังจาก git commit เราจะเห็นว่าต้นไม้ทั้งสามอยู่ในสภาพเดียวกัน (จะไม่มีอะไรทำ)

Git รีเซ็ตเป็นกู้ภัย

แล้วจุดประสงค์ของ . คืออะไร รีเซ็ต 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 รีเซ็ตเป็นกู้ภัย

นี่เป็นวิธีที่มีประโยชน์และรวดเร็วเมื่อเราต้องการเลิกทำการคอมมิต!

ยกเลิกการจัดเตรียมไฟล์เฉพาะ

สมมติว่าคุณเพิ่มไฟล์ลงในดัชนีด้วย 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 เป็นวิธีที่ปลอดภัยในการเปลี่ยนแปลงเหล่านี้ แต่นั่นเป็นการสนทนาอีกครั้ง จนกระทั่ง! 👋🏼