Git: การอัปเดตข้อมูลสาขาระยะไกล


125

ในที่เก็บ git สาขาระยะไกลที่ฉันไม่ได้ติดตามถูกลบ เมื่อฉันพิมพ์

git branch -r

สาขาที่ถูกลบยังคงปรากฏขึ้น (และฉันสามารถตรวจสอบได้)

ฉันต้องเรียกใช้คำสั่ง git อะไรเพื่ออัปเดตข้อมูลนี้

คำตอบ:


39

หากคุณดำเนินการบางอย่างเช่น

git branch -d -r remote_name/branch_name

คุณลบการชำระเงินในพื้นที่ของคุณเท่านั้น คำสั่งนี้ไม่ได้ทำอะไรกับที่เก็บระยะไกลซึ่งเป็นสาเหตุที่ยังคงปรากฏขึ้น

สารละลาย:

git push origin :branch_name

จะลบสาขาระยะไกล (สังเกต ':') และ

git branch -d branch_name

จะลบการชำระเงินในพื้นที่ของคุณ

( อ้างอิง )


146
คุณยังสามารถเรียกใช้ 'git remote prune origin' เพื่อล้างข้อมูลอ้างอิงระยะไกลของคุณ
cmcginty

3
ซึ่งจะลบสาขาทั้งหมดที่ไม่ได้ติดตามโดยที่เก็บระยะไกลอีกต่อไป ดังนั้นโปรดระวัง
Garrett Hyde

4
ฉันคิดว่ามันมีประโยชน์เช่นกันที่จะรู้ว่าแม้ว่าจะละเอียดกว่าเล็กน้อย แต่คุณก็สามารถใช้git push <remote> --delete <branchname>เพื่อลบสาขาระยะไกลได้เช่นกัน
AeroCross

โดยปกติจะใช้งานได้ แต่วันนี้ฉันเจอสถานการณ์ที่รายการรีโมตไม่ได้รับการอัปเดตดังนั้นฉันจึงพยายามลบสาขาที่ไม่มีอยู่ ดังนั้นวิธีแก้ปัญหาของ @Flo ด้านล่างจึงจำเป็นต้องมีก่อน
dgo

284

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

$ git remote prune <remotename>

เพื่อลบสาขาการติดตามระยะไกลที่อัปเดตทั้งหมดสำหรับรีโมตที่กำหนด (เช่นสาขาที่ติดตามสาขาซึ่งถูกลบออกในที่เก็บระยะไกล)

ดูgit remoteเอกสารประกอบ


ขอบคุณ @Casey และ @Jakub สำหรับคำตอบของคุณ! มันไม่มาได้อย่างไรว่าข้อมูลที่สาขาที่ห่างไกลที่เก็บไว้จะไม่ปรับปรุงการใช้งานครั้งต่อไปฉันgit fetch?
JJD

4
@JJD: เนื่องจากคุณอาจใช้งานของคุณในสาขาระยะไกลที่ไม่ได้อยู่ที่นี่แล้ว การหายตัวไปโดยไม่ต้องร้องขอจึงเป็นความคิดที่ไม่ดี นั่นเป็นเหตุผลที่คุณต้องตัดกิ่งไม้ติดตามระยะไกลอย่างชัดเจน
Jakub Narębski

"git gc" ล้างสาขาระยะไกลที่เก่าเกินไปหรือไม่
James Wald

@JamesWald: ไม่มันไม่ได้ git gcเพียงแค่แพ็คอ็อบเจ็กต์และการอ้างอิงและลบอ็อบเจ็กต์ที่ไม่ได้อ้างถึงขณะอยู่ที่มัน
Jakub Narębski

186
git remote update --prune

ควรรีเฟรชสาขาของรีโมตทั้งหมดเพิ่มรายการใหม่และลบสาขาที่ถูกลบออก

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


สิ่งนี้ได้ผลสำหรับฉัน ฉันจำเป็นต้องลบสาขาระยะไกลซึ่งด้วยเหตุผลบางอย่างไม่สามารถลบออกได้โดย 'git push origin: <branch_name>' ตามปกติ
n0denine

จะถูกต้องหรือไม่ที่จะบอกว่าคำตอบนี้ทำในสิ่งที่คำตอบของ Jakub Narębskiและอื่น ๆ นั่นคือมันพรุนและดึงการอัปเดต?
Frank Tan

14

นอกจากนี้ยังมีประโยชน์สำหรับการดูสาขาระยะไกลใหม่:

git fetch --all

สิ่งนี้ช่วยฉันได้มาก ข้อผิดพลาดบางอย่างใน Visual studio git ป้องกันไม่ให้แสดงสาขาใหม่ที่สร้างขึ้นหลังจากการโคลน คำสั่งนี้ช่วยแสดงสาขาใหม่
Venkatesh Muniyandi

nice n simple thx dude มีป้ายคำตอบสีบรอนซ์ติดบ้าน :)
danday74

2

คุณสามารถรวมแฟล็ก-rและ-dเพื่อลบสาขาระยะไกลได้


เคล็ดลับดีๆ! อย่างไรก็ตามในกรณีนี้มีหลายสาขาที่ถูกลบไปแล้วแน่นอนว่ามีคำสั่งให้ดึงข้อมูลอัปเดตเหล่านี้
Bain Markev

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