ดึงข้อมูลจากจุดเริ่มต้นด้วยสาขาระยะไกลที่ถูกลบหรือไม่


440

เมื่อฉันทำgit fetch originและที่มามีสาขาที่ถูกลบดูเหมือนว่าจะไม่อัปเดตในที่เก็บของฉัน เมื่อฉันก็ยังคงแสดงให้เห็นว่าgit branch -rorigin/DELETED_BRANCH

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


คำตอบ:


811

คุณต้องทำดังต่อไปนี้

git fetch -p

สิ่งนี้จะอัพเดทฐานข้อมูลท้องถิ่นของสาขาระยะไกล


1
ขอบคุณมาก. ฉันลบสาขาเหล่านั้นด้วยตนเองก่อน
Maksim Dmitriev

4
ด้วยเหตุผลบางอย่างคำสั่งของคุณใช้งานไม่ได้ แต่อันนี้ทำเพื่อสาขาระยะไกลที่ไม่มีอยู่ในoriginทางแยกของฉัน: git fetch -p origin เมื่อฉันจากนั้น git branch -r สาขาระยะไกลที่ไม่มีอยู่ไม่ปรากฏขึ้นอีกต่อไป
oldfartdeveloper

11
เพื่อความสมบูรณ์: ต้องเป็นเช่นเดียวกันกับgit remote prune originที่git pull --pruneกล่าวไว้ที่stackoverflow.com/a/6127884/94687และstackoverflow.com/a/17983126/94687ตามลำดับ
imz - Ivan Zakharyaschev

6
พวกเมื่อฉันทำมันมันบอกว่า[deleted] (none) -> origin/ < branch name >และสาขายังคงปรากฏบน repo ท้องถิ่นความคิดใด ๆ ทำไม?
Buddhi741

4
ฉันได้รับข้อความแจ้งว่าสาขาของฉันถูกลบไปแล้ว แต่การทำงานgit branchยังคงแสดงให้เห็นถึงสาขาที่ควรจะถูกลบ
sdfsdf

91

จากhttp://www.gitguys.com/topics/adding-and-removing-remote-branches/

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

คอมไพล์กำเนิดลูกพรุนระยะไกล

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


ฉันชอบสิ่งนี้เพราะมันไม่เรียกสิ่งใหม่
Marek R

30

คุณต้องทำดังต่อไปนี้

git fetch -p

เพื่อซิงโครไนซ์รายการสาขาของคุณ คู่มือการคอมไพล์กล่าวว่า

-p, --prune
หลังจากการดึงเอาการอ้างอิงระยะไกลติดตามใด ๆ ที่มีอยู่ไม่ได้อีกต่อไปในระยะไกล แท็กจะไม่ถูกตัดหากมีการดึงแท็กนั้นเนื่องจากแท็กเริ่มต้นที่ติดตามอัตโนมัติหรือเนื่องจาก--tagsตัวเลือก อย่างไรก็ตามหากแท็กถูกดึงข้อมูลเนื่องจากการอ้างอิงอย่างชัดเจน (บนบรรทัดคำสั่งหรือในการกำหนดค่าระยะไกลตัวอย่างเช่นหากการโคลนระยะไกลถูก--mirrorเลือกด้วยตัวเลือก) พวกเขาก็จะถูกตัดด้วยเช่นกัน

ฉันชอบใช้เป็นการส่วนตัวgit fetch origin -p --progressเพราะมันแสดงตัวบ่งชี้ความคืบหน้า



6

เกี่ยวกับgit fetch -pพฤติกรรมของการเปลี่ยนแปลงใน Git 1.9 และมีเพียง Git 2.9.x / 2.10 สะท้อนให้เห็นว่า

ดูกระทำ 9e70233 (13 มิถุนายน 2016) โดยเจฟฟ์คิง (peff )
(ผสานโดยJunio ​​C Hamano - gitster- in 1c22105 , 06 Jul 2016)

fetch: เอกสารที่การตัดแต่งกิ่งเกิดขึ้นก่อนดึงข้อมูล

สิ่งนี้มีการเปลี่ยนแปลงใน10a6cc8 ( fetch --prune: เรียกใช้ลูกพรุนก่อนดึงข้อมูล 2014-01-02) แต่ดูเหมือนว่าไม่มีใครในการสนทนาที่รู้ว่าเรากำลังโฆษณา "หลัง" อย่างชัดเจน

ดังนั้นเอกสารตอนนี้ระบุ:

ก่อนดึงข้อมูลให้ลบการอ้างอิงติดตามระยะไกลที่ไม่มีอยู่ในรีโมท

นั่นเป็นเพราะ:

เมื่อเรามีสาขาการติดตามระยะไกลชื่อ " frotz/nitfol" จากการดึงข้อมูลก่อนหน้านี้และอัปสตรีมตอนนี้มีสาขาที่ชื่อ " frotz" การดึงข้อมูลจะไม่สามารถลบ " frotz/nitfol" โดยใช้ " git fetch --prune" ออกจากอัปสตรีมได้ git จะแจ้งให้ผู้ใช้ใช้ " git remote prune" เพื่อแก้ไขปัญหา

เปลี่ยนวิธีการfetch --pruneทำงานของ "" โดยการย้ายการดำเนินการการตัดก่อนการดึงข้อมูล วิธีนี้แทนที่จะเตือนผู้ใช้ถึงข้อขัดแย้งมันจะแก้ไขโดยอัตโนมัติ

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