ลบสาขาระยะไกล Git แล้ว แต่ยังคงปรากฏใน 'branch -a'


552

สมมติว่าฉันมีสาขาชื่อcoolbranchในที่เก็บของฉัน

ตอนนี้ฉันตัดสินใจลบ (ทั้งจากระยะไกลและในพื้นที่) ด้วย:

git push origin :coolbranch
git branch -D coolbranch

ที่ดี! ตอนนี้สาขาถูกลบจริงๆ

แต่เมื่อฉันวิ่ง

git branch -a

ฉันยังรับ:

remotes/origin/coolbranch

สิ่งที่สังเกตได้คือเมื่อฉันโคลนที่เก็บใหม่ทุกอย่างเรียบร้อยและgit branch -aไม่แสดงสาขา

ฉันต้องการทราบ - มีวิธีลบสาขาจากbranch -aรายการโดยไม่ต้องโคลนอินสแตนซ์ใหม่หรือไม่?


1
ที่เกี่ยวข้อง: ลบสาขา Git ทั้งในประเทศและจากระยะไกล

58
หากคุณgit fetch -p(หรือgit pull -p) สาขาระยะไกลจะถูกตัด
yoyo

คำตอบ:


688

git remote prune originตามที่แนะนำในคำตอบอื่น ๆ จะลบสาขาที่ค้างทั้งหมดดังกล่าว นั่นอาจเป็นสิ่งที่คุณต้องการในกรณีส่วนใหญ่ แต่ถ้าคุณต้องการลบสาขาการติดตามระยะไกลเฉพาะนั้นคุณควรทำ:

git branch -d -r origin/coolbranch

(เรื่อง-rง่ายที่จะลืม ... )

-rในกรณีนี้จะ "แสดงรายการหรือลบ (หากใช้กับ-d) สาขาติดตามระยะไกล" ตามเอกสารของ Git พบได้ที่นี่: https://git-scm.com/docs/git-branch


11
git remote prune originหรือรูปแบบของgit fetch --pruneการตั้งค่าสถานะใด ๆไม่ได้ผลสำหรับฉันในกรณีของฉัน ... แต่git branch -d -r origin/feature/branch-nameทำงานได้ดี ฉันไม่แน่ใจว่ามันมีบางอย่างเกี่ยวกับมันอยู่ภายใต้featurenamespace (กระแส git) แต่นั่นเป็นวิธีที่มันลงไปในกรณีที่ googlers ใด ๆ พบว่าเกิดขึ้นกับพวกเขา
Misterparker

8
มีเหตุผลนี้จำเป็นหรือไม่ ดูเหมือนจะไม่ดีจริงๆที่จะปล่อยชื่อสาขาที่ไม่มีอยู่ในรายการและไม่ตัดให้โดยอัตโนมัติ
akronymn

296

ลอง:

git remote prune origin

จากเอกสารระยะไกล Git :

พรุน

ลบสาขาติดตามระยะไกลเก่าทั้งหมดภายใต้ <name> กิ่งก้านเก่าเหล่านี้ได้ถูกลบออกจากที่เก็บระยะไกลที่อ้างอิงโดย <name> แต่ยังคงมีอยู่ในเครื่องใน "remotes / <name>"

ด้วยตัวเลือก - ทำงานแห้งให้รายงานว่าจะตัดกิ่งสาขาใด แต่อย่าตัดทิ้งจริง ๆ


1
เพื่อความสมบูรณ์: ต้องเหมือนกับที่git pull --pruneกล่าวถึงที่stackoverflow.com/a/17983126/94687และ:git remote update --prune
imz - Ivan Zakharyaschev

230

อย่าลืมความน่ากลัว

git fetch -p

ซึ่งเรียกและตัดต้นกำเนิดทั้งหมด


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

2
แต่สาขาจะยังคงมองเห็นได้ถ้าคุณวิ่งgit branch -a
Nikhil Sahu

1
@NikhilSahu: ฉันไม่เห็นสาขาระยะไกลที่ถูกลบไปอีกแล้วด้วยgit branch -a
user276648

20

ในกรณีเฉพาะของเราเราใช้ Stash เป็นที่เก็บ Git ระยะไกลของเรา เราลองคำตอบก่อนหน้านี้ทั้งหมดและไม่มีอะไรทำงาน เราต้องทำสิ่งต่อไปนี้:

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

จากนั้นเมื่อผู้ใช้ไปสู่การเปลี่ยนแปลงพวกเขาจำเป็นต้องทำสิ่งต่อไปนี้:

git fetch -p

git branch -d branch-nameทำงานให้ฉัน แจ้งให้ทราบล่วงหน้าเพื่อ-D -dอันที่จริงเมื่อฉันลองด้วยตัวพิมพ์ใหญ่ D -Dมันได้สร้างสาขาใหม่ที่มีชื่อ -D
RP-

1
"-D" เป็นวิธีบังคับให้ลบโดยไม่คำนึงถึงสถานะการพุชหรือการผสาน เห็นได้ชัดว่าใช้อย่างระมัดระวัง แต่ในหลายกรณีมีความจำเป็น
Shadowvail

19

ใช้:

git remote prune <remote>

ในกรณีที่<remote>เป็นชื่อแหล่งระยะไกลเช่นต้นกำเนิดหรือต้นน้ำ

ตัวอย่าง: git remote prune origin


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