'git branch -av' แสดงรีโมตสาขาที่ไม่มีอยู่อีกต่อไป


168

นี่อาจเป็นคำถามที่โง่ แต่ฉันใหม่เอี่ยมสำหรับคอมไพล์และฉันเห็นสาขาระยะไกลที่ไม่มีอยู่อีกต่อไป

$ git branch -a
* master
  remotes/origin/master
  remotes/origin/production

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

$ git push origin :production

error: unable to push to unqualified destination: production
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@IP:puppet.git'

ฉันสามารถตรวจสอบสาขาการผลิตระยะไกลที่คาดคะเน แต่ได้รับสิ่งนี้:

$ git checkout origin/production
Note: checking out 'origin/production'.

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.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at c323996... added powerdns module, no really

ฉันไม่มีเงื่อนงำสิ่งที่ห่าฉันทำ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม


ผลลัพธ์คืออะไรgit branch -aหลังจาก a git fetch?
alediaferia

มีความเป็นไปได้ที่ซ้ำกันของวิธีการลบสาขาระยะไกลใน GitHub อย่างจริงจัง?
Cascabel

สำเนาที่ฉันเสนอมามีคำตอบที่อธิบายมากกว่าคำว่า manojlds ในที่นี้
Cascabel

คำตอบ:


338

คุณต้องทำ:

git remote prune origin

8
ขอบคุณที่ใช้งานได้! คุณช่วยอธิบายสิ่งที่เกิดขึ้นเบื้องหลังได้ไหม?
CarpeNoctem

12
เหล่านี้คือสาขาการติดตามระยะไกลใน repo ท้องถิ่นของคุณและคุณต้องล้างพวกเขาหากสาขาถูกลบใน repo ระยะไกล
manojlds

2
ฉันจะหาและใช้คำถามและคำตอบที่ตรงไปตรงมาอย่างรวดเร็ว
jleach

สุดยอดหนึ่งในพื้นที่ของฉันฉันเห็นกิ่งแปลก ๆ ซึ่งไม่มีส่วนเกี่ยวข้องกับรหัสฐาน repo เมื่อฉันรันคำสั่งนี้มันปรับสาขาต้นกำเนิดในท้องถิ่นของฉันแล้วฉันก็เพิ่มต้นแบบต้นน้ำ. ขอบคุณ
Ankur Srivastava

54

ดังนั้นจึงมีสองปัญหา ในทั้งสองกรณีจำ Git ถูกแจกจ่าย

เป็นครั้งแรก เมื่อคุณทำสิ่งต่าง ๆ เช่น

$ git branch -

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

$ git ต้นกำเนิดลูกพรุนระยะไกล

เพื่อลบสาขาเก่า

คำสั่ง 'git push origin: production' ใช้สำหรับลบสาขาออกจาก repo git ของคอมพิวเตอร์ระยะไกล ไม่ใช่ repo ในพื้นที่ของคุณ ในกรณีนี้มีคนอื่นลบสาขาใน repo คอมไพล์ของคอมพิวเตอร์ระยะไกลดังนั้นคุณจะเห็นข้อความแสดงข้อผิดพลาดนี้

นี่คือลิงค์ที่สรุปคำสั่งเหล่านี้

ปัญหาที่สองเกี่ยวข้องกับการชำระเงิน

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

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

ตอนนี้วิธีการตรวจสอบสาขาท้องถิ่นที่เป็นเช่นเดียวกับสาขาระยะไกล?

ง่ายคุณสร้างสาขาท้องถิ่นในเวลาที่ทำการชำระเงินสาขาระยะไกล

$ git checkout -b my_local_branch กำเนิด / ผลิต


20
git remote prune origin

ถูกต้องเพียงแค่เพิ่มคุณสามารถใช้--dry-runตัวเลือกที่รายงานว่าสาขาใดจะถูกตัดออกจาก repo ในพื้นที่ของคุณ แต่ไม่ได้ตัดพวกเขาจริงๆ

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