เมื่อคุณใช้งานgit push origin :staleStuffระบบจะลบโดยอัตโนมัติorigin/staleStuffดังนั้นเมื่อคุณเรียกใช้git remote prune originคุณได้ตัดกิ่งบางส่วนที่ถูกคนอื่นลบออกไป มีโอกาสมากขึ้นที่เพื่อนร่วมงานของคุณจะต้องวิ่งgit pruneเพื่อกำจัดสาขาที่คุณย้ายออกไป
แล้วอะไรกันแน่git remote prune? แนวคิดหลัก: สาขาในพื้นที่ (ไม่ใช่การติดตามสาขา) ไม่ได้สัมผัสด้วยgit remote pruneคำสั่งและควรลบออกด้วยตนเอง
ตอนนี้ตัวอย่างในโลกแห่งความจริงเพื่อความเข้าใจที่ดีขึ้น:
คุณมีที่เก็บระยะไกลที่มี 2 สาขา: masterและfeature. สมมติว่าคุณกำลังทำงานในทั้งสองสาขาดังนั้นคุณจึงมีการอ้างอิงเหล่านี้ในที่เก็บในเครื่องของคุณ (มีการตั้งชื่ออ้างอิงแบบเต็มเพื่อหลีกเลี่ยงความสับสน):
- refs/heads/master(ชื่อย่อ- master)
- refs/heads/feature(ชื่อย่อ- feature)
- refs/remotes/origin/master(ชื่อย่อ- origin/master)
- refs/remotes/origin/feature(ชื่อย่อ- origin/feature)
ตอนนี้สถานการณ์ทั่วไป:
- นักพัฒนารายอื่นบางรายทำงานเสร็จทั้งหมดfeatureรวมเข้าด้วยกันmasterและลบfeatureสาขาออกจากที่เก็บระยะไกล
- โดยค่าเริ่มต้นเมื่อคุณทำgit fetch(หรือgit pull) จะไม่มีการลบการอ้างอิงออกจากที่เก็บในเครื่องของคุณดังนั้นคุณยังคงมีการอ้างอิงทั้งหมด 4 รายการ
- git remote prune originคุณตัดสินใจที่จะทำความสะอาดพวกเขาขึ้นและวิ่ง
- git ตรวจพบว่าfeatureไม่มีสาขาอีกต่อไปดังนั้นจึงrefs/remotes/origin/featureเป็นสาขาเก่าที่ควรลบออก
- ตอนนี้คุณมีข้อมูลอ้างอิง 3 รายการรวมถึงrefs/heads/featureเนื่องจากgit remote pruneไม่ได้ลบrefs/heads/*การอ้างอิงใด ๆ
เป็นไปได้ที่จะระบุสาขาในพื้นที่ซึ่งเชื่อมโยงกับสาขาการติดตามระยะไกลโดยbranch.<branch_name>.mergeพารามิเตอร์การกำหนดค่า พารามิเตอร์นี้ไม่จำเป็นสำหรับสิ่งใดในการทำงาน (อาจยกเว้นgit pull) ดังนั้นพารามิเตอร์นี้จึงอาจหายไป
(อัปเดตด้วยตัวอย่างและข้อมูลที่เป็นประโยชน์จากความคิดเห็น)
               
              
git remote show originและมองหาสาขาที่มีเครื่องหมายstale