Visual Studio Code - ลบสาขาที่ถูกลบบน GitHub ที่ยังคงแสดงใน VS Code?


93

ใน VSCode หลังจากที่ฉันส่งคำขอดึงและลบสาขาบน GitHub สาขานั้นยังคงปรากฏใน Visual Studio Code หากฉันเลือกสาขามันจะให้ Error ตามที่คาดไว้

ฉันจะลบสาขาที่ถูกลบออกจาก VSCode ได้อย่างไร - ฉันสามารถทำได้โดยอัตโนมัติหรือไม่


2
หากต้องการติดตาม (3 ปีในภายหลัง) คำตอบที่ถูกต้องสำหรับฉันคือการรวมกันของgit fetch --pruneการอัปเดต / ลบการอ้างอิงสาขาระยะไกลและgit branch -d <branch-name>การลบสาขาในพื้นที่ ( -Dเพื่อบังคับ) รีสตาร์ท VSCode รีเฟรชจานสี
Drenai

ไม่จำเป็นต้องรีสตาร์ท VS Code เพียงแค่กดปุ่มรีเฟรชในเมนู Source Control
AS

ฉันสร้างฟังก์ชันเพื่อจัดการสิ่งนี้และเขียนบทความเล็กน้อยเกี่ยวกับเรื่องนี้ ลิงค์
davidhu

คำตอบ:


150

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

git fetch --prune

จากนั้นรีสตาร์ท Visual Studio เพื่อลบกิ่งก้านออกจากจานคำสั่ง


6
@ ไบรอันนี้ไม่ได้ลบสาขาในท้องถิ่นที่คุณมี คำสั่งนี้จะลบออกorigin/branch_nameจากเมนูคอมไพล์สวิตช์ด่วนบน VSCode ตัวอย่างเช่นหากคุณมีสาขาในท้องถิ่นtestและส่งไปยัง Github มีสองสาขาtestและorigin/testในเมนูสาขาคอมไพล์พรุนจะลบเฉพาะorigin/testสาขาเท่านั้นไม่ใช่testสาขา
davidhu

@ ไบรอันฉันพบว่าสิ่งนี้จะล้างสาขาที่ถูกลบจากระยะไกลหลังจากรีสตาร์ท VS Code
David Wilton

คำสั่งนี้ใช้ไม่ได้ ฉันยังคงเห็นสาขาทั้งหมดในรายการทั้งเมื่อคำสั่ง do git branchหรือคลิกที่ชื่อสาขาเพื่อดูรายการแบบเลื่อนลงของสาขาที่มีทั้งหมด
Anna Olshevskaia

@AnnaOlshevskaia git branchแสดงรายการเฉพาะสาขาภายในคำสั่งนี้ควรจะลบremotes/branch_nameสาขา ลองgit branch -aดูทุกอย่าง
davidhu

2
ไม่จำเป็นต้องรีสตาร์ท VS Code เพียงแค่กดปุ่มรีเฟรชในเมนู Source Control
AS

72

คุณสามารถลบสาขาในพื้นที่ออกจาก Visual Studio Code ได้โดยเปิด Command Pallete (Ctrl-Shift-P) จากนั้นเลือกGit: Delete Branch ...จากนั้นคุณสามารถลบสาขาภายในเครื่องได้โดยเลือกรายการที่เหมาะสมจากรายการ


1
ยังไม่ได้ทดสอบ แต่ดูเหมือนว่าจะแสดงเฉพาะสาขาในพื้นที่ดังนั้นจึงควรใช้งานได้ตามที่อธิบายไว้
jave.web

2
@TylerBell ตามที่เขาพูดไปแล้วมันเป็นวิธีการลบสาขาในพื้นที่ไม่ใช่สาขาระยะไกล
Anbuselvan Rocky

2
นี่น่าจะเป็นคำตอบ ฉันไม่รู้ว่าทำไมฉันถึงโง่มากที่ไม่รู้ตัวเอง ขอบคุณ @ matthew-disney-cook
Serzhan Akhmetov

17

สาขาที่ถูกลบออกจาก GitHub นั้นดี ... เพิ่งถูกลบออกจาก GitHub คุณยังมีสำเนาสาขาในเครื่องในเครื่องของคุณ git branch -d the_local_branchในการลบวิ่งสาขาในประเทศ ไม่มีคำสั่งใน VS Code ให้ทำ แต่คุณสามารถเริ่มเทอร์มินัลใน VSCode โดยใช้View: Toggle Integrated Terminalคำสั่งและเรียกใช้คำสั่งจากมัน

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดการสาขาโปรดไปที่เอกสาร git - https://git-scm.com/book/be/v2/Git-Branching-Branch-Management


สวัสดีขอบคุณ ใช่ฉันใช้คำสั่ง git ในปัจจุบัน .. แต่หวังว่า vscode git sync จะตรวจพบว่ารีโมตได้ลบออกหรือไฮไลต์ เดาว่าไม่ :-)
Drenai

ค่อนข้างโง่ที่พวกเขาไม่สนับสนุนคำสั่ง git แบบเนทีฟภายในบรรทัดคำสั่ง git ออกแบบมาไม่ดี
Steven

ยังรอการขยายอยู่ที่นี่ :)
Marko

1
โปรดดูคำตอบด้านบนจาก @ matthew-disney-cook
Orangutech

17

เปิดจานคำสั่ง (Ctrl + Shift + P) และเลือกGit: Fetch (พรุน)

ฟีเจอร์นี้ถูกรวมเข้ากับ VS Code เมื่อวันที่ 20 พฤศจิกายน 2018


1
มีวิธีทำให้พฤติกรรมเริ่มต้นของ git pull ใน vscode หรือไม่?
Tuncay Göncüoğlu

9

ฉันตีความคำถามว่าเป็น: ฉันจะลบสาขาในพื้นที่ของฉันที่ถูกรวมเข้าด้วยกันได้อย่างไรเนื่องจากฉันใช้ Git Fetch (พรุน) จากจานคำสั่ง นี่อาจถือเป็นการ "แฮ็ก" แต่เป็นสิ่งที่ฉันใช้ ในเทอร์มินัล PowerShell:

$branches = (git branch --merged).replace(" ", "").replace("*", "") | ? { $_ -ne "develop" -and $_ -ne "master" }
foreach ($branch in $branches) { git branch $branch -d }

ในกรณีที่คุณไม่คุ้นเคยกับ PoSH นี่คือสิ่งที่ทำ: บรรทัดแรกได้รับชื่อของสาขาที่ผสานทั้งหมด (ยกเว้นการพัฒนาและหลัก) และบรรทัดที่สองจะวนผ่านรายการนั้นและเรียกใช้ "git branch -d ". ตราบใดที่รวมสาขาอย่างสมบูรณ์คุณควรเห็น:

Deleted branch <branch name> (was <commit ID>).

สำหรับแต่ละสาขา บางครั้งฉันจะเข้าไปในสาขาที่ไม่สามารถลบได้ - หากเกิดเหตุการณ์นี้ขึ้นและคุณแน่ใจว่าจะถูกลบอย่างปลอดภัย (เช่นคุณจะไม่สูญเสียงานในเครื่องที่ไม่ได้จัดเก็บไว้) คุณสามารถเรียกใช้:

git branch <branch name> -D

สังเกตตัวพิมพ์ใหญ่ D - ที่บังคับให้ลบสาขาในพื้นที่


นั่นเป็นคำสั่ง PowerShell ที่บ้าคลั่ง😊ฉันต้องให้คะแนนโหวตสำหรับความกล้าหาญในการเรียกใช้สิ่งนั้นใน repo ของคุณ
Drenai

2
มีเส้นแบ่งระหว่างอัจฉริยะและความวิกลจริต นี่อยู่ห่างจากเส้นนั้นในด้านความวิกลจริต
Darren G

1
ไม่มันไม่ใช่. มันไม่ได้ซับซ้อนขนาดนั้นเมื่อคุณดูและอย่างไรก็ตามมันเป็นเพียงการแปลคำตอบจากที่นี่stackoverflow.com/questions/6127328/…
Scott Stafford

@ScottStafford สำหรับฉันคำสั่ง 170 ตัวอักษรเพื่อลบสาขาอยู่ด้านที่ซับซ้อนของการsimple | complexหาร😉
Drenai

7

สิ่งที่คุณต้องทำคือรันคำสั่งนี้:

git remote prune origin

สิ่งพิเศษที่คุณสามารถทำได้เพราะบางครั้งมันน่ารำคาญในการเปิดเทอร์มินัลเพื่อสิ่งนั้น .. คุณสามารถเพิ่มงานใน vscode ได้

โดยทำตามขั้นตอนต่อไปนี้:

  1. ใน VSCode View> Command Palette (cmd / ctrl + Shift + P)
  2. พิมพ์Configure Task
  3. เลือกสร้างไฟล์งาน json จากเทมเพลตและไฟล์ใหม่จะถูกสร้างขึ้นภายใต้โฟลเดอร์. vscode
  4. อาร์เรย์ภายในงานเพิ่มสิ่งนี้:

{"label": "Git Prune", "type": "shell", "command": "git remote prune origin", "problemMatcher": []}

วิธีใช้:

  1. เปิด Command Palette
  2. พิมพ์Run Taskแล้วเลือก
  3. เลือก Git Prune

อ้างอิง:

  1. Git พรุน

คุณรู้หรือไม่ว่าgit remote prune originแตกต่างจากคำตอบที่ยอมรับของgit fetch --prune? รายละเอียด Run Task ดีมากขอบคุณสำหรับการโพสต์
Drenai

@Drenai ไม่ใช่พวกเดียวกัน แต่สำหรับคำตอบแบบเต็มโปรดดูที่นี่
Bogdan Alexandru Militaru

5

คุณสามารถลบสาขาท้องถิ่นทั้งหมด (ยกเว้นมาสเตอร์) ด้วย:

git branch -r | grep -v "master" | xargs git branch -D

และคุณสามารถลบสาขาทั้งหมดที่ยังคงปรากฏเป็น origin/XXXXใน VSCode แต่ถูกลบไปแล้วoriginด้วย:

git fetch --prune

บันทึก:

คำสั่งแรกด้านบน (นำมาจากhttps://stackoverflow.com/a/52006270/3120163 ):

  • รายชื่อสาขาทั้งหมด
  • ลบสาขาหลักออกจากรายการ
  • ลบสาขาในรายการ

จะดีมากถ้าคุณสามารถเพิ่มคำอธิบายของคำสั่งแรกนั้น - สะดวกมาก👍
Drenai

2
ฉันเพิ่มคำอธิบาย @Drenai
Adrien Renaud

4

ฉันพบวิธีแก้ไขปัญหานี้ ดังนั้นคุณต้องลบรีโมตที่ลิงก์ไปยัง Github repo จากนั้นเพิ่มรีโมตอีกครั้ง

สาขาทั้งหมดที่ถูกลบออกจาก Github จะไม่ปรากฏใน vscode อีกต่อไป สมมติว่าoriginเป็นชื่อสำหรับ repo ระยะไกล

git remote remove origin

แล้ว

git remote add origin git@github.com:your-username/repo-name.git

1
ไม่ใช่ว่าฉันรู้ เป็นวิธีเดียวที่ฉันพบว่าจะลบสาขาระยะไกลที่ไม่มีอยู่แล้ว
davidhu


1

คุณไม่จำเป็นต้องgit fetch --pruneรีสตาร์ท VSCode อีกต่อไป
ด้วย VSCode 1.52 (พฤศจิกายน 2020) ตอนนี้คุณมี:

Git: พรุนเมื่อดึงข้อมูล

การเปิดใช้การgit.pruneOnFetchตั้งค่าจะทำให้ VS Code ทำงานgit fetch --pruneเมื่อดึงข้อมูลอ้างอิงระยะไกล

ไม่มีสาขาพิเศษในเครื่องอีกต่อไปเมื่อถูกลบออกจาก GitHub

ดูPR 89249 การแก้ไขปัญหา 86813 :

การใช้งาน:

{
   "git.pruneOnFetch": true
}

การตั้งค่าเป็นfalseค่าเริ่มต้น

สิ่งนี้จะเพิ่ม--pruneแฟล็กในการดึงข้อมูลคอมไพล์ทั้งหมด

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