Git เลิกทำการลบสาขาท้องถิ่น


376

ฉันเพิ่งลบสาขาที่ไม่ถูกต้องพร้อมการเปลี่ยนแปลงทดสอบบางอย่างที่ฉันต้องการ git branch -D branchNameฉันเพิ่งลบสาขาผิดปกติกับการเปลี่ยนแปลงการทดลองบางอย่างที่ฉันต้องการด้วย

ฉันจะกู้คืนสาขาได้อย่างไร


7
ดีใจที่ได้รู้ว่าฉันไม่ใช่คนง่อยเท่านั้นที่ทำสิ่งนี้ (และลืมที่จะส่งสำเนาจากระยะไกลเป็นประจำ)
Ray

คำตอบ:


718

คุณสามารถใช้git reflogเพื่อค้นหา SHA1 ของการกระทำครั้งสุดท้ายของสาขา จากจุดนั้นคุณสามารถสร้างสาขาใหม่ได้โดยใช้

git branch branchName <sha1>

แก้ไข: ดังที่ @ seagullJS พูดว่าbranch -Dคำสั่งจะบอกคุณ sha1 ดังนั้นหากคุณไม่ได้ปิดเครื่อง แต่ก็กลายเป็นเรื่องง่าย ตัวอย่างเช่นการลบนี้แล้วเรียกคืนชื่อสาขาทันทีmaster2:

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

71
Git จะบอกคุณว่า SHA1 คืออะไรเมื่อถูกลบสาขาดังนั้นถ้าคุณเพิ่งลบมันมันอาจจะมีไม่กี่บรรทัดในบรรทัดคำสั่ง
seagullJS

หากสาขานี้มีอยู่บนเซิร์ฟเวอร์หรือคุณสามารถใช้git branch branchName origin/branchName
Florian Castellane

นอกจากนี้ฉันลงเอยด้วยการใช้ git cherry-pick <sha1> เพื่อย้ายคอมมิชชันไปยังสาขา
Akin Okegbile

54

หากคุณรู้จัก SHA1 ล่าสุดของสาขาคุณสามารถลอง

git branch branchName <SHA1>

คุณสามารถค้นหา SHA1 โดยใช้git reflogอธิบายในการแก้ปัญหาที่นี่


34

หากคุณยังไม่ได้กดปุ่มลบคุณสามารถทำได้ดังนี้:

$ git checkout deletedBranchName

คำตอบนี้ทำให้ส่วนขยาย Git ปิดการทำงานเกี่ยวกับ "สาขาที่คุณพยายามผลักดันดูเหมือนว่าจะเป็นสาขาใหม่สำหรับรีโมทนี้" ขอบคุณมาก.
Omer

29

หากคุณเพิ่งลบสาขาคุณจะเห็นสิ่งนี้ในเทอร์มินัลของคุณ:

Deleted branch branch_name(was e562d13)
  • โดยที่ e562d13 เป็นรหัสเฉพาะ (aka "SHA" หรือ "hash") ด้วยวิธีนี้คุณสามารถกู้คืนสาขาที่ถูกลบได้

ในการกู้คืนสาขาให้ใช้:

git checkout -b <branch_name> <sha>

ตัวอย่างเช่น :

git checkout -b branch_name e562d13 

4

ขั้นแรก: สำรองข้อมูลไดเรกทอรีทั้งหมดของคุณรวมถึงไดเรกทอรี. git

ที่สอง: คุณสามารถใช้git fsck --lost-foundเพื่อรับ ID ของการกระทำที่หายไป

ที่สาม: ลดหรือรวมกับการกระทำที่สูญหาย

ที่สี่: คิดสองครั้งก่อนใช้ -D หรือ - บังคับกับ git :)

คุณสามารถอ่านการสนทนาที่ดีนี้กับวิธีการกู้คืนจากข้อผิดพลาดประเภทนี้

แก้ไข: โดยวิธีการที่ไม่ได้ทำงานgit gc(หรืออนุญาตให้มันทำงานด้วยตัวเอง - เช่นไม่ได้ทำงานgit fetchหรือสิ่งที่คล้ายกัน) หรือคุณอาจสูญเสียความมุ่งมั่นของคุณตลอดไป


1
1 และ 4 เป็น overkill IMO
jwg

ใช่นั่นคือเหตุผลที่เราใช้คอมไพล์เพื่อหลีกเลี่ยงการแบกทุกสิ่งรอบตัว ทุกการกระทำที่คุณทำไว้ยังคงมีให้คุณ
คู่สมรส

4

ขอบคุณสิ่งนี้ใช้ได้

git branch new_branch_name sha1

git checkout new_branch_name

// สามารถดูไฟล์เก่าของฉันที่เช็คอินในสาขาเก่าของฉัน


3

ทำตามขั้นตอนเหล่านี้:

1: เข้าสู่:

git reflog show 

สิ่งนี้จะแสดงประวัติ Commit ทั้งหมดคุณต้องเลือก sha-1 ที่มีคอมมิทล่าสุดที่คุณต้องการรับกลับ

2: สร้างชื่อสาขาด้วยSha-1 ID ที่คุณเลือกเช่น: 8c87714

git branch your-branch-name 8c87714

0

สิ่งนี้ใช้ได้กับฉัน:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.