Visual Studio Code - hapus cabang yang dihapus di GitHub yang masih ditampilkan di VS Code?

93

Di VSCode, setelah saya melakukan permintaan tarik dan menghapus cabang di GitHub, cabang itu masih muncul di Visual Studio Code. Jika saya memilih cabang, itu memberi kesalahan, seperti yang diharapkan.

Bagaimana cara menghapus cabang yang sekarang dihapus ini dari VSCode - dapatkah saya melakukannya secara otomatis?

Drenai
sumber
2
Untuk menindaklanjuti (3 tahun kemudian), jawaban yang benar bagi saya adalah kombinasi dari git fetch --prunememperbarui / menghapus referensi cabang jarak jauh, dan git branch -d <branch-name>menghapus cabang lokal ( -Duntuk memaksa). Mulai ulang palet penyegaran VSCode
Drenai
Tidak perlu me-restart VS Code, cukup tekan tombol Refresh di menu Source Control
AS
Saya sebenarnya membangun sebuah fungsi untuk menangani ini dan menulis sedikit artikel tentangnya. Tautan
davidhu

Jawaban:

150

Ternyata, fitur ini memang disengaja. Saya menemukan bahwa cara yang benar untuk menghapus semua cabang jarak jauh yang telah dihapus dari Github adalah dengan menjalankan perintah berikut.

git fetch --prune

Kemudian restart studio visual untuk menghapus cabang dari palet perintah

davidhu
sumber
6
@ Brian, ini tidak menghapus cabang lokal yang Anda miliki. Perintah ini menghapus origin/branch_namedari menu git sakelar cepat di VSCode. Misalnya, jika Anda memiliki cabang lokal testdan mendorongnya ke Github, ada dua cabang test, dan origin/testpada menu cabang git, pemangkasan hanya menghapus origin/testcabang, bukan testcabangnya.
davidhu
@ Brian Saya menemukan bahwa ini akan menghapus cabang jarak jauh yang dihapus setelah restart VS Code
David Wilton
perintah ini tidak berfungsi. Saya masih melihat semua cabang dalam daftar baik ketika melakukan perintah git branchatau mengklik nama cabang untuk melihat dropdown dengan semua cabang yang tersedia
Anna Olshevskaia
@AnnaOlshevskaia git branchhanya mencantumkan cabang lokal, perintah ini seharusnya menghapus remotes/branch_namecabang. Coba git branch -alihat semuanya.
davidhu
2
Tidak perlu me-restart VS Code, cukup tekan tombol Refresh di menu Source Control
AS
72

Cabang lokal dapat dihapus dari Visual Studio Code dengan membuka Command Pallete (Ctrl-Shift-P) lalu Memilih Git: Hapus Cabang ... , Anda kemudian dapat menghapus cabang lokal dengan memilih yang sesuai dari daftar.

Matthew Disney-Cook
sumber
1
Belum mengujinya, tetapi tampaknya hanya menampilkan cabang lokal, jadi seharusnya berfungsi seperti yang dijelaskan.
jave.web
2
@TylerBell Seperti yang telah dia katakan, ini adalah metode untuk menghapus cabang lokal, bukan cabang jarak jauh.
Anbuselvan Rocky
2
ini seharusnya jawabannya. saya tidak tahu mengapa saya begitu bodoh sehingga tidak mengetahui ini sendiri. terima kasih @ matthew-disney-cook
Serzhan Akhmetov
17

Cabang yang dihapus dari GitHub baik-baik saja ... baru saja dihapus dari GitHub. Anda masih memiliki salinan cabang lokal di komputer Anda. Untuk menghapus lari cabang lokal git branch -d the_local_branch. Tidak ada perintah dalam VS Code untuk melakukannya, tetapi Anda dapat memulai terminal di VSCode menggunakan View: Toggle Integrated Terminalperintah dan menjalankan perintah darinya.

Untuk informasi lebih lanjut tentang manajemen cabang, silakan kunjungi dokumentasi git - https://git-scm.com/book/be/v2/Git-Branching-Branch-Management

Krzysztof Cieslak
sumber
Hei terima kasih. Ya, saya menggunakan perintah git saat ini .. tetapi saya berharap vscode git sync akan melihat bahwa remote telah menghapusnya - atau menyorotnya. Sepertinya tidak :-)
Drenai
Bodoh sekali karena mereka tidak mendukung perintah git asli dalam baris perintah git mereka. Dirancang dengan buruk.
Steven
juga menunggu perpanjangan di sini :)
Marko
1
Silakan lihat jawaban di atas dari @ matthew-disney-cook
Orangutech
17

Buka palet perintah (Ctrl + Shift + P) dan pilih Git: Fetch (Prune) .

Ini fitur itu digabung ke dalam Kode VS pada 20 November 2018.

tgr42
sumber
1
apakah ada cara untuk membuat perilaku default dari git pull in vscode ini?
Tuncay Göncüoğlu
9

Saya menafsirkan pertanyaannya menjadi: bagaimana cara menghapus cabang lokal saya yang telah digabungkan, karena saya telah menggunakan Git Fetch (Prune) dari palet perintah. Ini mungkin dianggap sebagai "retasan", tetapi itulah yang saya gunakan. Di terminal PowerShell:

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

Jika Anda tidak terbiasa dengan PoSH, inilah fungsinya: baris pertama mendapatkan nama dari semua cabang yang digabungkan (dengan pengecualian develop dan master), dan baris kedua melewati daftar itu dan menjalankan "git branch -d ". Selama cabang digabungkan sepenuhnya, Anda akan melihat:

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

untuk setiap cabang. Terkadang saya akan menemukan cabang yang gagal dihapus - jika ini terjadi, dan Anda yakin aman untuk dihapus (yaitu Anda tidak akan kehilangan pekerjaan lokal yang belum disimpan), Anda dapat menjalankan:

git branch <branch name> -D

Perhatikan huruf besar D - yang secara paksa menghapus cabang lokal.

Darren G
sumber
Itu adalah satu perintah PowerShell yang gila😊 Saya harus memberikan suara positif untuk keberanian untuk menjalankannya di repo Anda
Drenai
2
Ada garis tipis antara kejeniusan dan kegilaan. Ini jauh dari garis itu, di sisi kegilaan.
Darren G
1
Tidak, tidak. Ini tidak terlalu rumit ketika Anda melihatnya, dan bagaimanapun, itu hanya terjemahan jawaban yang kuat dari sini: stackoverflow.com/questions/6127328/…
Scott Stafford
@ScottStafford Bagi saya perintah 170 karakter untuk cabang delete di sisi kompleks simple | complexdivide😉
Drenai
7

Yang perlu Anda lakukan adalah menjalankan perintah ini:

git remote prune origin

Sesuatu ekstra yang dapat Anda lakukan, karena terkadang membuka terminal hanya untuk itu mengganggu .. Anda dapat menambahkan tugas di vscode.

Untuk melakukan itu, silakan ikuti langkah-langkah berikut:

  1. Dalam Tampilan VSCode > Palet Perintah (cmd / ctrl + Shift + P)
  2. ketik Configure Task
  3. Pilih Buat file task.json dari template dan file baru akan dibuat di bawah folder .vscode .
  4. Di dalam larik tugas tambahkan ini:

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

Bagaimana cara menggunakannya:

  1. Buka Command Palette
  2. Ketik Jalankan Tugas dan pilih
  3. Pilih Git Prune

Referensi:

  1. Git prune
Bogdan Alexandru Militaru
sumber
Apakah Anda tahu jika git remote prune originberbeda dari jawaban yang diterima git fetch --prune? Detail Jalankan Tugas sangat bagus, terima kasih telah mempostingnya
Drenai
@Drenai Tidak, mereka sama. Tetapi untuk tanggapan lengkap lihat di sini
Bogdan Alexandru Militaru
5

Anda dapat menghapus semua cabang lokal (kecuali master) dengan:

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

Dan Anda dapat menghapus semua cabang yang masih muncul seperti origin/XXXXdi VSCode tetapi sudah dihapus origindengan:

git fetch --prune

catatan:

Perintah pertama di atas (diambil dari https://stackoverflow.com/a/52006270/3120163 ):

  • daftar semua cabang
  • hapus cabang master dari daftar
  • hapus cabang dalam daftar
Adrien Renaud
sumber
Akan lebih bagus jika Anda bisa menambahkan penjelasan bahwa perintah pertama - itu sangat berguna 👍
Drenai
2
Saya menambahkan penjelasan @Drenai
Adrien Renaud
4

Saya menemukan cara untuk memperbaikinya. Jadi, Anda perlu menghapus remote yang tertaut ke repo Github, lalu menambahkan remote lagi.

Semua cabang yang dihapus dari Github tidak akan muncul lagi di vscode. Dengan asumsi itu originadalah nama untuk repo jarak jauh.

git remote remove origin

Kemudian

git remote add origin [email protected]:your-username/repo-name.git
davidhu
sumber
1
tidak yang saya tahu. Ini satu-satunya cara saya menemukan yang akan menghapus cabang-cabang terpencil yang tidak ada lagi.
davidhu
3

Perintah yang lebih singkat adalah:

git fetch -p
Al Gol
sumber
1

Anda tidak perlu git fetch --prunedan memulai ulang VSCode lagi.
Dengan VSCode 1.52 (November 2020), Anda sekarang memiliki:

Git: Pangkas saat diambil

Mengaktifkan git.pruneOnFetchpengaturan akan membuat VS Code berjalan git fetch --prunesaat mengambil referensi jarak jauh.

Tidak ada lagi cabang tambahan secara lokal setelah mereka dihapus dari GitHub.

Lihat PR 89249 , memperbaiki masalah 86813 :

Pemakaian:

{
   "git.pruneOnFetch": true
}

Pengaturan secara falsedefault.

Ini akan menambahkan --prunebendera ke semua pengambilan git.

VonC
sumber