Git บอกว่าไม่มีการอ้างอิงระยะไกลเมื่อฉันลบสาขาระยะไกล


130

ฉันวิ่ง git branch -a

* master
  remotes/origin/test
  remotes/origin/master

ฉันต้องการลบสาขาระยะไกลของฉัน

ฉันพยายามแล้ว

git push origin --delete remotes/origin/test

ฉันได้

ข้อผิดพลาด: ไม่สามารถลบ 'รีโมท / ต้นทาง / ทดสอบ': ไม่มีการอ้างอิงระยะไกล

มันไม่มีอยู่จริงได้อย่างไร?

ฉันทำgit branch -aและฉันเห็นมันอยู่ในรายการ

ฉันพลาดอะไรไปหรือเปล่า?


1
git branch -aจะแสดงรายชื่อสาขาในพื้นที่ของคุณไม่ใช่จากรีโมทของคุณ ขวา?

ฉันคิดว่าพวกเขาทั้งหมด ฉันไม่แน่ใจ.
cyber8200

2
จะแสดงสาขาระยะไกลภายในท้องถิ่นของคุณ จะไม่แสดงรายการสาขาระยะไกลทั้งหมด

1
@peterh ดูเหมือนว่าฉันจะถามจริงๆว่า "ทำไมฉันไม่สามารถลบสาขาระยะไกลได้" (อาจเป็นเมื่อสาขาถูกลบออกจากรีโมต แต่การอ้างอิงระยะไกลยังคงอยู่ในเครื่อง) ดังนั้นจึงไม่ใช่รายการที่ซ้ำกัน แต่สามารถทำได้กับ ชื่อที่ชัดเจนกว่า
Andrew Spencer

1
ฉันทำการแก้ไขชื่อหวังว่านี่จะใกล้เคียงกับเจตนาของคำถามมากขึ้น
Andrew Spencer

คำตอบ:


259

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

git fetchวิธีการปกติในการปรับปรุงรายการของสาขาระยะไกลคือการใช้ สิ่งนี้จะได้รับรายการสาขาที่อัปเดตโดยอัตโนมัติจากระยะไกลและตั้งค่าสาขาระยะไกลในพื้นที่เก็บข้อมูลในเครื่องรวมถึงการเรียกวัตถุการคอมมิตใด ๆ ที่คุณอาจขาดหายไป

อย่างไรก็ตามโดยค่าเริ่มต้นgit fetchจะไม่ลบสาขาระยะไกลที่ไม่มีสาขาคู่กันบนรีโมทอีกต่อไป ในการดำเนินการดังกล่าวคุณจำเป็นต้องตัดรายชื่อสาขาระยะไกลอย่างชัดเจน:

git fetch --prune

สิ่งนี้จะกำจัดสาขาระยะไกลที่ไม่มีอยู่บนรีโมทโดยอัตโนมัติ หลังจากนั้นgit branch -rจะแสดงรายการปรับปรุงของสาขาที่จริงๆอยู่ในระยะไกล: git pushและคนที่คุณสามารถลบโดยใช้

ดังที่กล่าวไว้ในการใช้งานgit push --deleteคุณต้องระบุชื่อของสาขาบนที่เก็บระยะไกล ไม่ใช่ชื่อสาขาระยะไกลของคุณ ดังนั้นในการลบสาขาtest(แสดงโดยสาขาระยะไกลของคุณorigin/test) คุณจะใช้git push origin --delete test.


นอกจากนี้ยังgit branch -r | grep "origin"จะช่วยโครงการขนาดใหญ่ที่ใช้ส้อม
Seraf

ดังนั้นจึงมี 2 เหตุผลในการรับข้อความนี้จากคอมไพล์: remotes/origin/ทั้งสาขาถูกลบแล้วบนเซิร์ฟเวอร์หรือคุณนำหน้าชื่อผิดสาขาด้วย หรือทั้งคู่.
Andrew Spencer

137

ความหมายของการremotes/origin/testเป็นว่าคุณมีสาขาที่เรียกว่าในเซิร์ฟเวอร์ระยะไกลtest originดังนั้นคำสั่งจะเป็น

git push origin --delete test

25

มีทางลัดในการลบสาขาในต้นทาง:

git push origin :<branch_name>

ซึ่งก็เหมือนกับการทำ git push origin --delete <branch_name>


13
  1. รับรายชื่อสาขาระยะไกล
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. คุณควรได้รับรายชื่อสาขาระยะไกล:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. ตอนนี้เราสามารถลบสาขา:
git push origin --delete deleteme


4

เนื่องจากสาขาระยะไกลเป็นรีโมท / ต้นทาง / ทดสอบคุณสามารถใช้สองวิธี:

git push origin --delete test

และ

git branch -D -r origin/test

3

ฉันทำตามวิธีแก้ปัญหาโดยการกระตุ้นด้วยการปรับเล็กน้อยในตอนท้าย ขั้นตอนของฉันเป็นไปตาม
- git fetch --prune;
- git branch -aการพิมพ์สิ่งต่อไปนี้
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(สาขาระยะไกลเพื่อลบ)
- git push origin --delete branch.
นี่คือสาขาที่จะลบไม่ได้ตั้งชื่อเป็นแต่เพียงremotes/origin/branch branchและกิ่งก้านจะถูกลบออก


+1 สำหรับความคิดเห็นเรื่องชื่อสาขาที่ผมพยายามที่จะลบเมื่อมันก็ควรจะเป็นorigin/branch branch
ken

1

git branch -a จะแสดงรายการสาขาในพื้นที่ของคุณไม่ใช่สาขาในรีโมทของคุณ

และข้อผิดพลาดerror: unable to delete 'remotes/origin/test': remote ref does not existหมายความว่าคุณไม่มีสาขาในชื่อนั้นในรีโมต แต่มีสาขาอยู่ในพื้นที่ของคุณ


สิ่งนี้มีประโยชน์ มันแก้ปัญหาการลบของฉัน ฉันสงสัยว่าทำไม 'git push --delete origin / test' ไม่ทำงานในขณะที่ "git push --delete test" ทำงาน
user10293779

1

หนึ่งซับที่มีประโยชน์ในการลบสาขาอื่นที่ไม่ใช่ 'master' จากต้นทาง:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

ต้องแน่ใจว่าคุณเข้าใจผลของการรันสิ่งนี้ก่อนที่จะทำเช่นนั้น!


ขอบคุณสำหรับรหัสนี้! นี่เป็นรหัสคอมไพล์เดียวที่ฉันทดสอบเพื่อลบสาขาระยะไกลทั้งหมดยกเว้นมาสเตอร์
Alvin

1

สำหรับฉันสิ่งนี้ได้ผล $ ▶ git branch -D -r origin / mybranch

รายละเอียด

$ ▶สาขา git -a | grep mybranch รีโมท / ต้นกำเนิด / mybranch

$ ▶สาขา git -r | ต้นกำเนิด mybranch grep / mybranch

$ ▶ git branch พัฒนาคุณสมบัติ * / pre-deployment

$ ▶ git push origin - ลบข้อผิดพลาด mybranch: ไม่สามารถลบ 'mybranch': remote ref ไม่มีข้อผิดพลาด: ล้มเหลวในการส่ง refs บางส่วนไปที่ 'git@10.102.100.38: config / myrepo.git'

$ ▶ git branch -D -r origin / mybranch ลบต้นกำเนิดสาขาระยะไกล / mybranch (คือ 62c7421)

$ ▶สาขา git -a | grep mybranch

$ ▶สาขา git -r | grep mybranch


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