คำเตือน: remote HEAD หมายถึงการอ้างอิงที่ไม่มีอยู่จริงไม่สามารถชำระเงินได้


87

ดูเหมือนว่าเป็นข้อผิดพลาดยอดนิยมสำหรับสาเหตุต่างๆ

ฉันมี repo คอมไพล์เปล่า ๆ ที่เรียกว่า "kiflea.git" ฉันโคลนมันเป็นแบบนี้:

git clone git://kipdola.be/kiflea.git

แล้วคอมไพล์บอกฉัน: warning: remote HEAD refers to nonexistent ref, unable to checkout.

และใช่ไม่มีไฟล์เวอร์ชันในแผนที่ยกเว้นไดเร็กทอรี. git อย่างไรก็ตามสิ่งเดียวที่ฉันต้องทำคือ:

cd kiflea
git checkout master

และใช้งานได้ไฟล์ทั้งหมดอยู่ที่นั่น แต่ฉันคิดว่าการโคลน repo จะตรวจสอบต้นแบบโดยอัตโนมัติดังนั้นสิ่งที่เกิดขึ้นและฉันจะแก้ไขได้อย่างไร

ฉันสังเกตเห็นว่าหลังจากฉันทำgit checkout masterบิตแล้วสิ่งนี้จะถูกเพิ่มลงในไฟล์ config. git ในเครื่องของฉัน:

[branch "master"]
    remote = origin
    merge = refs/heads/master

อาจเป็นเรื่องน่าสนใจที่ทราบว่าที่เก็บ git นี้เคยเป็นที่เก็บ svn ในอดีตอันไกลโพ้น

Ps: เมื่อเรียกดูที่เก็บเปล่าโดยใช้ gitweb มีmasterสาขาอยู่ที่นั่นอย่างชัดเจน: http://kipdola.be/gitweb/?p=kiflea.git;a=summary


2
อะไรgit ls-remote originแสดงให้คุณเห็น?
CB Bailey

เหมือนกันก่อนหรือหลังcheckout masterบิต:25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
skerit

1
ดูเหมือนว่าพื้นที่เก็บข้อมูลระยะไกลได้หายไป (หรือไม่เคยมี) HEADของมัน คุณมีสิทธิ์เข้าถึงโดยตรงหรือไม่? ถ้าเป็นเช่นนั้นดูที่นี่
CB Bailey

1
หากคุณโคลนที่เก็บและไม่ได้ระบุสาขาก็จะพยายามใช้รีโมตเฮด ตามที่อธิบายไว้ด้านล่างในคำตอบคุณไม่สามารถมีอิทธิพลต่อสาขาโดยตรง อย่างไรก็ตามการตรวจสอบสาขาอื่นในเวลาโคลนคุณจะหลีกเลี่ยงการตรวจสอบนี้ ในกรณีของคุณดูเหมือนว่ามาสเตอร์มีอยู่ แต่มีจุดหัวระยะไกลอยู่ที่อื่นดังนั้นให้ใช้:git clone -b master <url> <dir>
eckes

คำตอบ:


128

warning: remote HEAD refers to nonexistent ref, unable to checkout.หมายความว่าระยะไกล (เปลือย) พื้นที่เก็บข้อมูลที่มีการอ้างอิงสาขาในไฟล์ที่เรียกว่าHEADที่ไม่ตรงกับสาขาที่เผยแพร่ในพื้นที่เก็บข้อมูลเดียวกัน

โปรดทราบว่าคำเตือนนั้นหมายความว่าคอมไพล์ไม่ได้ทำการชำระเงินเท่านั้น ที่เก็บโคลนนั้นใช้ได้ดี เพียงทำgit branch -aเพื่อดูสาขาที่เป็นไปได้และgit checkout the-branch-you-wantวิธีแก้ไขปัญหา

นี้มักจะเกิดขึ้นเพราะเนื้อหาเริ่มต้นสำหรับแฟ้มที่ ( .git/HEADหรือเปล่าHEADสำหรับเก็บเปลือย) เป็นref: refs/heads/masterที่บอกว่าถ้าใครจะไปเก็บข้อมูลนี้พวกเขาควรด้วยโคลนเริ่มต้นสาขาclone refs/heads/masterโดยค่าเริ่มต้น Git จะสร้างสาขาในเครื่องโดยไม่มีrefs/heads/คำนำหน้า (นั่นคือmasterโดยค่าเริ่มต้น) ลองgit help symbolic-refดูข้อมูลเพิ่มเติม

ปัญหาในสถานการณ์นี้คือ Git ไม่มีวิธีการแก้ไขการอ้างอิงสัญลักษณ์ระยะไกลดังนั้นคุณอาจใช้บางสิ่งที่ผู้ให้บริการโฮสติ้ง Git ได้นำมาใช้ (เช่นการตั้งค่า - สาขาเริ่มต้นใน GitHub หากคุณมีสิทธิ์ผู้ดูแลระบบ) หรือคุณต้องใช้ชื่อสาขาmasterเป็นสาขาเริ่มต้น (เนื่องจากเป็นค่าเริ่มต้นสำหรับการอ้างอิงสัญลักษณ์นั้น)

หากคุณมีการเข้าถึงเปลือกเพื่อ repo คอมไพล์ระยะไกลของคุณคุณก็สามารถcd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZที่XYZเป็นชื่อสาขาที่คุณต้องการที่จะใช้เป็นค่าเริ่มต้น

วิธีการหนึ่งที่จะตีปัญหานี้คือการสร้างใหม่ repo เปลือยระยะไกลโดยไม่มีการกระทำแล้วทำgit push name-of-the-remote my-special-branch-nameซึ่งจะส่งผลในพื้นที่เก็บข้อมูลเปลือยที่มีสาขาเดียวmy-special-branch-nameแต่โทษสัญลักษณ์ยังคงมีค่าเริ่มต้นที่ชี้ไปที่HEAD masterด้วยเหตุนี้คุณจะได้รับคำเตือนดังกล่าวข้างต้น


20
โปรดทราบว่าคำเตือนหมายความว่าคอมไพล์ไม่ได้ทำcheckoutเท่านั้น ที่เก็บโคลนนั้นใช้ได้ดี ทำgit branch -aเพื่อดูสาขาที่เป็นไปได้และgit checkout the-branch-you-wantจะ "แก้ไข" ปัญหา
Mikko Rantalainen

2
อย่างน้อยก็สามารถหลีกเลี่ยงการใช้หัวรีโมตได้เมื่อใช้git clone -b master(หรือชื่อของสาขาที่มีอยู่)
เป็นต้น

ฉันได้ทำสิ่งที่คุณเขียนในย่อหน้าสุดท้ายแล้ว มีไฟล์ในสาขาใน repo เปล่า (ภายใน gitlab) แต่ดูเหมือนว่าโคลนจะว่างเปล่า {git branch -a} ไม่แสดงอะไรเลย ดูเหมือนว่า {git clone -b my-special-branch-name <url>} จะใช้งานไม่ได้ (วางสายจากระยะไกล)
Ed Randall

ฉัน "แก้ไข" โดยการคัดลอก refs / remotes / my-special-branch-name ไปยัง refs / head และแก้ไข HEAD ให้ตรง (ใน repo gitlab เปล่า) จากนั้นฉันสามารถโคลนได้สำเร็จโดยใช้ -b my-special-branch-name แต่วิธีใดที่ถูกต้องในการกำหนดค่า repo เปล่าเปล่าหลังจากรอบ "init" / "push" เพื่อให้โคลน -b ไม่พบปัญหาโปรด?
Ed Randall

1
@EdRandall cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZที่XYZเป็นชื่อสาขาเริ่มต้นที่คุณต้องการที่จะใช้ในกรณีที่git cloneมีการกระทำโดยไม่ได้รับ-bธง หากคุณมีปัญหาอื่นโปรดถามคำถามใหม่แทนที่จะเพิ่มคำถามเป็นความคิดเห็น
Mikko Rantalainen

10

ฉันมีปัญหาเดียวกันเพราะฉันไม่ได้ใช้masterสาขาอีกต่อไปและมันหายไปทั้งในพื้นที่เก็บข้อมูลภายในและระยะไกลของฉัน

ที่เก็บระยะไกลยังคงHEADตั้งค่าเป็นmasterฉันได้เปลี่ยนเป็นหนึ่งในสาขาระยะไกลที่ฉันใช้จริงและทุกอย่างทำงานได้ดี

หากคุณสามารถเข้าถึงที่เก็บระยะไกลของคุณ:

  • ไปที่remote_repo.git;
  • แก้ไขHEADไฟล์
  • เปลี่ยนref: refs/heads/masterเป็นref: refs/heads/your_branch

ทั้งสองเงื่อนไขเป็นไปได้มาสเตอร์ถูกลบออกและ HEAD ยังคงชี้ไปที่มันหรือ HEAD ถูกเปลี่ยนเป็นสาขาที่ถูกลบออกในภายหลัง ฉันเดาว่า (เนื่องจากการชำระเงินของผลงานหลัก) ตัวเลือกที่สองคือกรณีของเรา @MarcoBonifazi ในว่ากรณีที่ "เปลี่ยน" จะแทนที่ด้วยbroken_branch refs/heads/master
เช่น

2
มีวิธี "ที่เหมาะสม" ในการตั้งค่าสาขา HEAD แบบนี้โดยไม่ต้องแก้ไขไฟล์หรือไม่?
Ed Randall

@EdRandall cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZซึ่งXYZเป็นชื่อสาขาเริ่มต้นที่คุณต้องการใช้ถ้าgit cloneทำโดยไม่มี-bแฟล็กตามที่ฉันพูดในความคิดเห็นอื่น
Mikko Rantalainen

7

ใช่สิ่งนี้เกี่ยวข้องกับ git clone ของคุณที่พยายามเช็คเอาต์สาขาที่แตกต่างจาก master เพียงแค่ทำสิ่งนี้

git clone user@git-server:project_name.git -b branch_name /some/folder

สิ่งนี้จะช่วยให้คุณโคลนสาขาที่แน่นอนผ่านชื่อสาขา


2

แม้ว่าข้อผิดพลาดนี้จะปรากฏขึ้น - โครงการของฉันยังคงเชื่อมต่อกับที่เก็บที่เกี่ยวข้อง - ฉันรันgit branchคำสั่งและเห็นสาขาที่เหมาะสม - จากนั้นฉันก็วิ่งgit checkout *branchnameและบูม - ทุกอย่างเรียบร้อยดี


ใช่ @ มิกโกะอธิบายว่าเหตุผลคืออะไร หากคุณต้องการข้ามการชำระเงินคุณสามารถใช้ตัวเลือก -b (แต่จะดีกว่าที่จะแก้ไข repo ระยะไกลของคุณในระยะยาว!)
เช่น

1

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


ฉันเดาว่าคุณหมายถึง: "git push -u origin HEAD: HEAD" มันไม่ได้แก้ปัญหาอะไรให้ฉันเลย ...
RzR

1

ฉันเดาว่ามันเป็นผู้นำ*ในบันทึกการกระทำที่หลอกเซิร์ฟเวอร์ระยะไกล

ฉันสามารถเรียกดูอินเทอร์เฟซเว็บของ repo ได้โดยใช้ลิงก์เมนูบางรายการ แต่บางรายการล้มเหลวด้วย404 - Unknown commit objectหรือคล้ายกันโดยเฉพาะจากหน้าสรุป

ดูว่าคุณสามารถแก้ไขข้อความคอมมิตล่าสุดนั้นได้หรือไม่จากนั้นบังคับให้ทำการอัปเดตเพื่อดูว่าสามารถแก้ไขได้หรือไม่ อาจจะมีบั๊กปีศาจเซิร์ฟเวอร์ หากแก้ไขได้ก็ควรรายงานใน git list git@vger.kernel.org (ข้อความธรรมดาเท่านั้น)


1

ฉันมีปัญหาเดียวกันเมื่อสร้าง repo เปล่า

ฉันแก้ไขได้เพียงแค่โคลน repo สร้างสาขาหลักในท้องถิ่นจากนั้นผลักดันต้นแบบไปยัง repo ระยะไกล

1) โคลน repo

$ git.exe clone --progress -v "the remote path" "my local path"

2) สร้างสาขาหลักในเครื่อง

   $ git checkout -b master

3) กระทำบางอย่างในสาขาท้องถิ่น

$ git add readme.md 
$ git commit –m “Added readme”

4) กด local master บนรีโมท

   $ git push origin master

0

หากไม่มีสาขาหลักให้ตรวจสอบดังต่อไปนี้ หากมีไฟล์ชื่อ 'packing-refs' อยู่ในโฟลเดอร์ '.git' ให้เปิดขึ้นมาและคุณจะพบการอ้างอิงทั้งหมดในรายการ

สิ่งที่ต้องการด้านล่าง;

# pack-refs with: peeled fully-peeled 
e7cc58650190bd28599d81917f1706445d3c6d8b refs/tags/afw-test-harness-1.5
^cfae4f034e82591afdf4e5ed72279297d0eee618
6afe1bcfa4bd74de8e0c8f64d024e1cc289206df refs/tags/afw-test-harness-2.1
^c32f7fa495d4b44652f46c065fcd19c3acd237a6
72f2e4284dfbf27c82967da096c6664646bbdd19 refs/tags/android-1.6_r1
^50992e805e758e2231f28ec2127b57a1a9fd0ddc
0cbd528cad1cee9556098b62add993fc3b5dcc33 refs/tags/android-1.6_r1.1

จากนั้นใช้;

git checkout refs/tags/xxxx

หรือ

git checkout 'HASH value'

เพื่อชำระเงินเวอร์ชันที่ต้องการ ขอขอบคุณ.


0

ฉันดูเหมือนจะแก้ไขด้วย:

git checkout -b  master
git push

สิ่งนี้สร้างต้นแบบเริ่มต้นจากนั้นฉันสามารถชำระเงินสาขาอื่นของฉันได้



0

สำหรับ Gitlab แม้ว่าจะแสดงว่าคุณอยู่ในสาขาเริ่มต้น (เช่นmaster) คุณอาจไม่ได้อยู่ที่นั่นจริง ๆ การตั้งค่าอีกครั้งจะแก้ไขได้ดังนี้:

  1. สร้างสาขาใหม่อาจจะ asd
  2. การตั้งค่า> ที่เก็บ> สาขาเริ่มต้นซึ่งแสดงสาขาเริ่มต้นคือ master
  3. ตั้งค่าเป็น asd
  4. ตั้งค่ากลับไปที่ master
  5. ลบasdสาขา

เสร็จสิ้นตอนนี้สาขาเริ่มต้นของคุณคือ master

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