Git: ดูเหมือนจะอยู่ใน“ (ไม่มีสาขา)” จากนั้นสูญเสียการเปลี่ยนแปลงของฉัน


11

ฉันพยายามที่จะผลักดันจากพื้นที่ทำงาน Git ของฉันถึง Github แต่ดูเหมือนว่าการเปลี่ยนแปลงที่เพิ่มและมุ่งมั่นของฉันไม่ได้รับการอัปโหลด

จากนั้นทำ "สาขา git" ฉันมีบางอย่างที่ดูเหมือน:

git branch
* (no branch)
  master

อย่างโง่เขลาฉันคิดว่าฉันสามารถกลับไปเป็นอาจารย์ด้วย

git checkout master

และตอนนี้การเปลี่ยนแปลงของฉันดูเหมือนจะหายไป สาขาหลักของฉันอายุประมาณหนึ่งวัน และดูเหมือนจะไม่มีทางเปลี่ยนกลับไปเป็นแบบนี้ (ไม่มีสาขา)

การเปลี่ยนแปลงของฉันสูญหายหรือไม่? หรือมีวิธีการกู้คืนได้อย่างไร

คำตอบ:


13

ตราบใดที่คุณยังไม่ได้ทำgit gcคุณก็ไม่แพ้อะไรเลย สิ่งที่คุณต้องทำคือค้นหามันอีกครั้ง :) คุณได้อะไรจาก:

git reflog show

นั่นควรแสดงให้คุณเห็นสิ่งที่เกิดขึ้นและรหัสของโหนดที่หายไป


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

คุณพูดถูก ข้อสันนิษฐานของฉันจากคำถามคือว่ามันเป็นเรื่องของความมุ่งมั่น ฉันอัพเดตคำตอบแล้ว
CK

เฮ้ขอบคุณ! ฉันมุ่งมั่นที่จะซ่อนสาขาขนาดใหญ่จากนั้นเปลี่ยนเป็นต้นแบบเพื่อรวมเข้าใน ... และการอ้างอิงของฉันก็คือ
ปาสกาล

มันค่อนข้างนานหลายปีแล้ว แต่ฉันก็กระโดดลงไปเช่นกัน ฉันเปลี่ยนกลับเป็นสาขาหลักและทันใดนั้นกะเทย 2 วันทำงานทั้งหมดของฉัน (นั่นคือ 8 ชั่วโมงต่อวัน) หายไป ขอบคุณมาก!
Falgantil

5

คำตอบข้างต้นถูกต้อง นี่คือสิ่งที่ฉันทำ:

$ git reflog
5b35f6d HEAD@{1}: pull github master: Fast forward
ca92d15 HEAD@{2}: checkout: moving from 759dab1b15731ce7680c26839ca470d20e709e36 to master
759dab1 HEAD@{3}: commit (merge): Merge branch 'master' of github.com:gonzojive/IODB-ui into HEAD
065e269 HEAD@{4}: commit: added fieldsets to snazzy form
f357606 HEAD@{5}: commit: preliminary support for google maps.
ca92d15 HEAD@{6}: checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

$ git checkout ca92d15d272867b63d54f96d4aa57f8ecc479cd0

"โอ้ไม่!" ช่วงเวลานี้คือ:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 เป็นสาขาที่ไม่ระบุชื่อที่แสดงเป็น (ไม่มีสาขา) หากต้องการกลับไปที่เดิมเพียงทำการชำระเงินคอมไพล์และ pseudobranch เก่าของคุณได้รับการกู้คืน

ฉันขอแนะนำให้สำรองข้อมูลที่เก็บ git ของคุณก่อนที่คุณจะตั้งใจ gc เพียงเพื่อความสบายใจ


เพียงตรวจสอบจากสาขาไม่ได้ทำงานสำหรับฉัน ฉันทำการเปลี่ยนแปลงอย่างถูกต้องในสาขาคุณลักษณะของฉัน ถึงกระนั้นฉันก็ไม่สามารถเห็นพวกเขาในพื้นที่ทำงานของฉัน ฉันต้องสูญเสียการเปลี่ยนแปลงไปในทางอื่น git reset --hard <commit-id>แต่ผมสามารถกู้คืนการเปลี่ยนแปลงของฉันโดยการดำเนินการ กระทำ ID git reflogเป็นอัลฟารหัสตัวเลขในคอลัมน์แรกของ ดูeffectif.com/git/recovering-lost-git-commits
Torsten

2
# if you have already checked out to master, 
# you won't know the commit-ish of your "no branch":

git fsck --lost-found # (to find your <commit-ish>)
git merge <commit-ish>

# if you are still on your "no branch" commit:

git log # (the commit-ish will be on the first line)
git checkout master
git merge <commit-ish>

# or

git log | head -n 1 | cut -d ' ' -f 2 | pbcopy
git checkout master
git merge <commit-ish>

จากหลายวิธีรวมถึง rev-list มีเพียง fsck เท่านั้นที่ช่วยค้นหาการผูกมัดที่น้อยลง ขอบคุณมาก.
temoto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.