Git Reflog - วิธีการกู้คืนสาขาที่ถูกลบซึ่งไม่ได้รวมเข้าด้วยกัน



บทความเกี่ยวกับ Git Reflog นี้เป็นคำแนะนำที่ครอบคลุมเกี่ยวกับวิธีการคืนค่าการแยกส่วนที่ถูกลบใน Git ด้วยความช่วยเหลือของ Git Reflog

“ คุณเคยสูญเสียสาขาที่ซอร์สโค้ดซึ่งยังไม่ได้รวมเข้ากับสาขา 'release' หรือสาขา 'หลัก' หรือไม่? จะเกิดอะไรขึ้นถ้าคุณต้องการสร้างสาขาที่ถูกลบอีกครั้งแม้ว่างานนั้นจะรวมเข้ากับสาขาหลักแล้ว ' . ทางออกเดียวสำหรับสถานการณ์ดังกล่าวคือ ไป Reflog .

ผ่านบทความเกี่ยวกับ Git Reflog ฉันจะช่วยคุณทำความเข้าใจสถานการณ์ที่งานของคุณในสาขาอาจสูญหายและวิธีการกู้คืนสาขานอกจากนี้บทความนี้จะเน้นย้ำถึงแนวทางที่คุณสามารถทำได้เพื่อป้องกันการสูญเสียสาขาโดยไม่ได้ตั้งใจขณะทำงานในโครงการขนาดใหญ่





    1. Git Reflog คืออะไร?
    2. สาขาจะถูกลบอย่างไรและเมื่อใด
    3. กู้คืนสาขาที่ถูกลบ
    4. จะกู้คืนงานอะไรเมื่อสาขาที่ถูกลบถูกกู้คืน
    5. คำสั่งย่อย Git Reflog

ดังนั้นให้เราเริ่มต้นกับบทความนี้



พิจารณาสถานการณ์มaintainer ต้องผสานสาขาฟีเจอร์จำนวนมากจากผู้ทำงานร่วมกันที่แตกต่างกันแล้วจึงลบออกในที่สุด แต่สาขาถูกลบโดยไม่ได้ตั้งใจก่อนที่จะรวมงานได้?

ก่อนที่ฉันจะดำเนินการต่อในบทความนี้ขอบอกก่อนว่ามันเป็นไปไม่ได้ใน Git มีความปลอดภัยและทำหน้าที่เป็นเช็คโพสต์จะไม่อนุญาตให้คุณทำเช่นนั้น ดังนั้นนี่คือจุดที่ Git Reflog เข้ามาในรูปภาพ

Git Reflog คืออะไร?

คำสั่ง 'reflog' เก็บไฟล์ ติดตามของ ทุกการเปลี่ยนแปลงที่เกิดขึ้นในข้อมูลอ้างอิง (สาขาหรือแท็ก) ของที่เก็บและเก็บประวัติล็อกของสาขาและแท็กที่สร้างขึ้นภายในหรือเช็คเอาต์ บันทึกการอ้างอิงเช่นสแน็ปช็อตคอมมิตของเวลาที่สาขาถูกสร้างหรือโคลนเช็กเอาต์เปลี่ยนชื่อหรือคอมมิตใด ๆ ที่ทำในสาขาจะถูกดูแลโดย และแสดงรายการโดยคำสั่ง 'reflog'



บันทึก: สาขาจะกู้คืนได้จากไดเร็กทอรีการทำงานของคุณก็ต่อเมื่อสาขานั้นเคยมีอยู่ในที่เก็บในเครื่องของคุณเช่น สาขาถูกสร้างขึ้นภายในหรือเช็คเอาต์จากที่เก็บระยะไกลในที่เก็บในเครื่องของคุณเพื่อให้ Git เก็บบันทึกประวัติอ้างอิง

คำสั่งนี้จะต้องดำเนินการในที่เก็บที่มีสาขาที่สูญหาย หากคุณพิจารณาไฟล์สถานการณ์ที่เก็บระยะไกลจากนั้นคุณต้องดำเนินการคำสั่ง reflog บนเครื่องของนักพัฒนาที่มีสาขา

คำสั่ง: ไป reflog

วิธีใช้สไปรต์ css

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

ขั้นตอนที่ 1: แสดงรายการสาขาที่รวมเข้าเป็นหลัก

ขั้นแรกตรวจสอบในส่วน ' ปรมาจารย์ ’สาขาหากคุณอยู่ในสาขาอื่นโดยใช้คำสั่ง:

$ git หลักชำระเงิน

เอาต์พุต

Git Checkout Master - Git Reflog - Edureka

ตอนนี้หากต้องการรับรายชื่อสาขาที่ผสานให้พูดถึงคำสั่งต่อไปนี้:

สาขา $ git - รวม

เอาท์พุต:

ขั้นตอนที่ 1.1: จากนั้นลบสาขาที่ผสาน:

$ git branch -d ปัญหา # 902

เอาท์พุต:

สาขา 'ปัญหา # 902' ถูกลบเรียบร้อยแล้วเนื่องจากมีการรวมเข้ากับสาขา 'หลัก' แล้ว

ขั้นตอนที่ 2: ตอนนี้ให้เราแสดงรายการสาขาที่ไม่ได้รวมเข้ากับหลัก

สาขา $ git - ไม่รวม

เอาต์พุต

ขั้นตอนที่ 2.2: สุดท้ายให้เราลบสาขาที่ไม่ได้ผสานด้วยคำสั่งต่อไปนี้:

$ git branch -d prepod

หากคุณพยายามลบหนึ่งในสาขาที่มีงานที่ยังไม่เสร็จให้พูดว่า 'พรีร็อด' branch คอมไพล์จะแสดงข้อความเตือน

เอาต์พุต

ตอนนี้ก่อนที่ฉันจะบอกคุณว่าคุณสามารถกู้คืนข้อมูลได้อย่างไรบทความนี้ใน Git Reflog ให้ฉันบอกคุณว่าเกิดอะไรขึ้นเมื่อสาขาถูกลบและในกรณีใดบ้างที่สามารถกู้คืนสาขาได้

สาขาจะถูกลบอย่างไรและเมื่อใด

อย่างที่เรารู้กันว่า Git คือไฟล์ ระบบควบคุมเวอร์ชันแจกจ่าย (DVCS) ทุกเครื่องที่มีโคลนหรือสำเนาของที่เก็บจะทำหน้าที่เป็นทั้งสองอย่าง โหนด และก ฮับ . นี้หมายความว่าแต่ละเครื่องจะมีสำเนาของรหัสพื้นที่เก็บข้อมูลและประวัติของตัวเองไม่จำเป็นต้องพูดว่าคุณจะเป็น การแบ่งปัน งานของคุณกับผู้อื่นและ การเผยแพร่ เหมือน.

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

กรณีที่ 1 - นักพัฒนาสามารถรวมหรือลบสาขาได้

พิจารณาสถานการณ์ที่นักพัฒนารวมสาขาคุณลักษณะเข้ากับสาขาหลักในเครื่องแล้วลบสาขาคุณลักษณะโดยใช้ปุ่ม ' สาขา git ’กับคำสั่ง“ - ” ตามที่เห็นในภาพหน้าจอก่อนหน้านี้

คำสั่ง: 'git branch -d branch_name'

นอกจากนี้ยังอาจเกิดขึ้นได้ที่นักพัฒนาตัดสินใจทิ้งการเปลี่ยนแปลงในสาขาและตัดสินใจที่จะลบสาขาโดยไม่รวมกับสาขาอื่นโดยใช้คำสั่งต่อไปนี้:

คำสั่ง: 'git branch -D branch_name'

ด้วยคำสั่งดังกล่าวผู้พัฒนาคือลบสาขาที่ลบล้างคำเตือนคอมไพล์อย่างจริงจัง

$ git branch -D preprod

เอาต์พุต

บันทึก : สาขา 'preprod' จะไม่ปรากฏอีกต่อไปเมื่อคุณเรียกใช้คำสั่ง 'git branch' ดังนั้น yงานของเราที่บันทึกไว้ในสาขานี้จะสูญหายไป

กรณีที่ 2 - นักพัฒนาลบสาขาในที่เก็บที่ใช้ร่วมกัน

ลองพิจารณาสถานการณ์สมมติที่นักพัฒนาที่มีสิทธิ์อ่าน / เขียนพยายามลบสาขาระยะไกลโดยบังคับโดยใช้คำสั่ง 'git push' พร้อมกับแฟล็ก '–delete'

อะไรคือความแตกต่างระหว่างการเอาชนะและการโอเวอร์โหลด
$ git push origin - ลบ Quickfix

เอาต์พุต

นอกจากนี้ยังอาจมีกรณีที่ผู้ใช้ที่ไม่ได้รับอนุญาตหรือผู้ประสงค์ร้ายบังคับให้ทำการลบสาขาระยะไกลในกรณีนี้ผู้ดูแลจะสามารถกู้คืนสาขา ‘quickfix’ ที่ถูกลบได้ก็ต่อเมื่อผู้พัฒนาเคยตรวจสอบสาขานี้มาก่อน ในสถานการณ์นี้ที่เก็บในเครื่องจะยังคงมีบันทึกการอ้างอิงอยู่

หากผู้ดูแลไม่สามารถกู้คืนสาขาได้เจ้าของสาขาที่ลบสาขาจะต้องกู้คืนจากการรีบล็อกในพื้นที่ของตน

กรณีที่ 3 - สคริปต์ hook ที่มีสิทธิ์พิเศษจะลบสาขา

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

ตอนนี้คุณรู้แล้วว่าจะเกิดอะไรขึ้นเมื่อคุณลบสาขาให้เราดำเนินการต่อด้วยบทความเกี่ยวกับ Git Reflog และดูวิธีการกู้คืนสาขาที่สูญหาย

กู้คืนสาขาที่ถูกลบโดยใช้ Git Reflog

ขั้นตอนที่ 1 : บันทึกประวัติของการอ้างอิงทั้งหมด

รับรายการบันทึกประวัติที่บันทึกไว้ในเครื่องทั้งหมดสำหรับการอ้างอิงทั้งหมด ('master', 'uat' และ 'prepod') ในที่เก็บนี้

ไป reflog

ขั้นตอนที่ 2 : ระบุตราประทับประวัติ

ดังที่คุณสามารถอ้างอิงได้จากภาพรวมด้านบนไฟล์ รหัสคอมมิตที่ไฮไลต์: e2225bb พร้อมกับดัชนีตัวชี้ HEAD: 4 คือตอนที่ ‘ ขายต่อ สาขา ’ถูกสร้างขึ้นจากตัวชี้ HEAD ปัจจุบันที่ชี้ไปที่งานล่าสุดของคุณ

ขั้นตอนที่ 3 : กู้คืน

เพื่อกู้คืนไฟล์ ‘ขายต่อเถอะ 'สาขาใช้คำสั่ง'git checkout' ผ่านการอ้างอิงตัวชี้ HEAD ด้วยรหัสดัชนี - 4นี่คือการอ้างอิงตัวชี้เมื่อสาขา 'พรีรอด' ถูกสร้างขึ้นรหัสคอมมิตแบบยาวที่ไฮไลต์ในภาพหน้าจอเอาต์พุต

git checkout -b preprod HEAD @ {4}

เอาต์พุต

java แปลง double เป็น int

และ voila! ‘ ขายต่อ 'สาขาจะถูกกู้คืนกลับมาพร้อมกับซอร์สโค้ดทั้งหมดของคุณ

บันทึก : ขอขรวบรวมคำสั่ง 'git checkout' ที่ใช้ข้างต้นและช่วยให้คุณเข้าใจได้ดีขึ้น:

คำสั่ง 'git checkout' เป็นคำสั่งที่โหลดเกิน (เช่นเดียวกับฟังก์ชันที่ใช้ Java มากเกินไป) นี่คือส่วนที่กู้คืนสาขาจริง

คำสั่งเดียวนี้ก่อนอื่นจะตรวจสอบการประทับเวลาประวัติก่อนหน้านี้ที่ชี้โดย HEAD @ {4} ตัวชี้ จากนั้นสร้างสาขาที่มีชื่อ 'พรีรอด' โดยใช้ตัวเลือก '-b' รวมทั้งเปลี่ยนไดเร็กทอรีการทำงานของคุณไปยังสาขาที่สร้างขึ้นใหม่

หมายความว่าสาขาที่เปลี่ยนจะเปลี่ยนจาก 'master' เป็น 'preprod' ตามที่ระบุไว้ในหน้าจอเอาต์พุตตอนนี้คุณสามารถรวมเข้ากับสาขา 'master' หรือ 'release' ได้ตามรูปแบบการแตกแขนงของคุณ

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

จะกู้คืนงานอะไรเมื่อสาขาที่ถูกลบถูกกู้คืน

ไฟล์ที่ถูกซ่อนและบันทึกไว้ในรายการดัชนีที่เก็บจะถูกกู้คืนกลับมา ไฟล์ที่ไม่ได้ติดตามจะสูญหายไป นอกจากนี้ฉันt เป็นความคิดที่ดีที่จะจัดเวทีและทำงานของคุณหรือซ่อนไว้เสมอ

ในการดึงการอ้างอิงบันทึกของสาขาหรือแท็กเฉพาะให้เรียกใช้คำสั่ง -“ git reflog”

ตัวอย่าง: ในการตรวจสอบการอ้างอิงบันทึกของสาขา 'uat' เพียงอย่างเดียวให้ใช้คำสั่ง - 'git reflog uat'

คำสั่งย่อย Git Reflog

ไป reflog

คำสั่งเพื่อเปิดหน้าคู่มือ

$ git reflog - help

เอาต์พุต

ไป reflog แสดง

แสดงบันทึกของการอ้างอิงที่ให้ไว้ในบรรทัดคำสั่ง

git reflog แสดง master @ {0}

ไป reflog หมดอายุ

คำสั่งนี้ใช้เพื่อตัดรายการ reflog ที่เก่ากว่า

git reflog หมดอายุ

ไป reflog ลบ

คำสั่งนี้จะลบรายการเดียวจากประวัติ reflog

git reflog ลบ

ไป reflog มีอยู่

คำสั่งนี้ตรวจสอบว่า ref (branch หรือ tag) มี reflog - รายการประวัติบันทึกหรือไม่

git reflog มีอยู่

นอกเหนือจากคำสั่งที่กล่าวมาแล้วคำสั่ง“ Git Reflog” ยังใช้คำสั่งย่อยต่างๆและอ็อพชันที่แตกต่างกันขึ้นอยู่กับคำสั่งย่อยที่กล่าวถึงข้างต้น สำหรับการอ่านเพิ่มเติมเรียกใช้ ' git reflog - help ” จากหน้าต่างเทอร์มินัล

ด้วยเหตุนี้เราจึงสิ้นสุดบทความนี้เกี่ยวกับ Git Reflogความตั้งใจของ DevOps คือการสร้างซอฟต์แวร์ที่มีคุณภาพดีขึ้นอย่างรวดเร็วและมีความน่าเชื่อถือมากขึ้นในขณะที่เชิญชวนให้มีการสื่อสารและการทำงานร่วมกันระหว่างทีมมากขึ้น หากคุณรู้สึกทึ่งกับบทความนี้ค กำจัดไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรม Edureka DevOps Certification ช่วยให้ผู้เรียนเข้าใจว่า DevOps คืออะไรและได้รับความเชี่ยวชาญในกระบวนการและเครื่องมือต่างๆของ DevOps เช่น Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack และ GIT สำหรับการทำหลายขั้นตอนใน SDLC โดยอัตโนมัติ

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบทความ 'Git Reflog' แล้วเราจะติดต่อกลับโดยเร็วที่สุด