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

Git Detached HEAD

แม้ว่าคุณอาจไม่พบปัญหาของ HEAD ที่แยกออกมา แต่สิ่งสำคัญคือต้องทราบเกี่ยวกับปัญหาดังกล่าว เพื่อที่คุณจะได้หลีกเลี่ยงปัญหาดังกล่าว ตามคำแนะนำ อย่าคอมมิตบน HEAD ที่แยกออกมา แต่ถ้าคุณทำ เราจะแสดงวิธีบันทึกการคอมมิตของคุณ

คำเตือน

เพื่อให้เข้าใจว่า HEAD คืออะไร เรามาทบทวนโครงสร้างที่เหมือนต้นไม้ของ Git

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

ทำความเข้าใจกับ HEAD ที่แนบมา

ตอนนี้เราเข้าใจแล้วว่า HEAD เป็นเพียงการคอมมิตล่าสุดในสาขาปัจจุบันที่คุณอยู่ โดยทำ git status มันจะบอกสาขาของคุณเช่น On branch master และด้วยการทำ git log มันจะบอกประวัติคอมมิชชันของคุณด้วยข้อมูลเช่น:

commit 38373004b8f651b58cea64cd629e1e2c18c164a0 (HEAD -> master, origin/master, origin/HEAD)
Author: Felipe <email>
Date:   Wed Sep 29 22:57:59 2020 -0500

แล้วถ้าเราต้องเปลี่ยน branch ของเราเป็น development branch ด้วย git checkout development จากนั้น HEAD จะย้ายไปที่การคอมมิตสุดท้าย ดังนั้น ในกรณีปกติทั้งหมดเหล่านี้ หัวหน้าจะติดตามเราเนื่องจากมันควรจะติดกับการคอมมิตครั้งสุดท้ายบนแบรนช์ที่เราอยู่

ถอดหัว

มีสองวิธีที่เราสามารถถอด HEAD ของเราได้

  • การใช้ git checkout --detach คำสั่ง
  • ชำระเงินเพื่อคอมมิตแฮช เช่น. หากเราใช้การคอมมิตจากด้านบน git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
  • โดยการเพิ่ม ^0 ในสาขาที่กำหนด เช่น. git checkout master^0 .

ฉันไม่แน่ใจว่าคุณต้องการถอด HEAD โดยเจตนาหรือไม่ กรณีที่พบบ่อยที่สุดคือโดยไม่ได้ตั้งใจ คุณต้องการชำระเงินไปยังสาขาและใช้การคอมมิตแฮชแทนชื่อสาขา

แล้วจะเกิดอะไรขึ้นหลังจาก HEAD ที่แยกออกมา? คุณอาจได้รับคำเตือนในลักษณะนี้:

$ git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
Note: checking out '38373004b8f651b58cea64cd629e1e2c18c164a0'.

You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.

เมื่ออยู่ในสภาวะแวดล้อม HEAD ที่แยกออกมา หากคุณทำ git status แม้ว่าคุณจะทำการเปลี่ยนแปลง มันจะขึ้นดังนี้:

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

HEAD detached at ac63806
nothing to commit, working tree clean

ดังนั้น มันจะเหมือนกับว่าคุณถูกแช่แข็งไว้ตามกาลเวลา และทุกสิ่งที่คุณทำจะสูญหายไป หรือเพียงแค่ไม่ไปไหน ทำไม? ก็เพราะว่า HEAD ไม่ได้ชี้ไปที่อะไร

บางคนพบว่าสิ่งนี้มีประโยชน์ในการสำรวจสถานะก่อนหน้าของที่เก็บโดยไม่ต้องกังวลว่าจะพัง

แนบศีรษะอีกครั้ง

คุณต้องเข้าใจว่าสาขาใดๆ ของคุณจะไม่ได้รับผลกระทบหากคุณเคยอยู่ในสถานะแยกตัว . วิธีที่ดีที่สุดในการติด HEAD ใหม่คือการสร้างสาขาใหม่

เราสามารถทำได้ง่ายๆ เช่น git checkout -b <branch-name> .

จะเกิดอะไรขึ้นถ้าเราไม่ได้ตระหนักว่าเราไม่มี HEAD และเริ่มทำการเปลี่ยนแปลง? ที่นี่เราจะต้องสร้างสาขาชั่วคราวและรวมเข้ากับสาขาที่เราต้องกระทำ ตัวอย่างเช่น:

git checkout -b temp-branch
git checkout master
git merge temp-branch

สิ่งนี้จะยืนยันการเปลี่ยนแปลงจากสาขาชั่วคราวของคุณไปยังสาขาที่คุณต้องการ ในกรณีนี้ อาจารย์

บทสรุป

วันนี้เราได้เรียนรู้วิธีถอด HEAD ของเรา (ไม่ใช่ตามตัวอักษร) และต้องทำอย่างไรหลังจากนั้น การทำความเข้าใจว่า HEAD คืออะไรในการทำงานภายในของ Git จะช่วยให้เราเข้าใจกรณีพิเศษ เช่น HEAD ที่แยกออกมา

นอกจากนี้เรายังเรียนรู้ที่จะไม่ต้องกังวลหากเราจบลงด้วยสถานะ HEAD ที่แยกออกมา พึงระลึกไว้เสมอว่าเนื่องจาก HEAD ของคุณหลวม การเปลี่ยนแปลงและการกระทำจะไม่มีผลใดๆ ดังนั้นตรวจสอบให้แน่ใจว่าคุณได้แนบ HEAD กลับเข้าไปใหม่ตามนั้น