Saya ingin menghapus semua cabang yang terdaftar di output ...
$ git branch
... tetapi mempertahankan cabang saat ini, dalam satu langkah . Apakah itu mungkin? Jika ya, bagaimana caranya?
git
git-branch
sensorario
sumber
sumber
Jawaban:
Berdasarkan jawaban @pankijs, saya membuat dua alias git:
Untuk ditambahkan
~/.gitconfig
Dan, seperti yang dikatakan @torek:
Pada dasarnya, jangan pernah menggunakan
-force
versi tersebut jika Anda tidak 300% yakin Anda tidak akan kehilangan sesuatu yang penting. Karena itu hilang selamanya .sumber
git branch branchname commitid
akan menghapus semua cabang kecuali master (ganti master dengan cabang yang ingin Anda simpan, tetapi kemudian master akan dihapus)
sumber
grep -v ^*
.master-copy
, misalnyagrep -v "^ *master$"
grep -v "master\|my-other-branch"
.pertama (alihkan ke cabang yang ingin Anda pertahankan> ex : master ):
kedua ( pastikan Anda berada di master )
sumber
git branch -D $(git branch).Trim()
.$(git branch)
tanda kutip? Ini tidak berhasil: error: branch '$ (git' not found. Error: branch 'branch)' not found.git branch -d
(atau-D
) memungkinkan beberapa nama cabang, tetapi agak sulit untuk secara otomatis menyediakan "semua cabang lokal kecuali yang saya gunakan sekarang" tanpa menulis setidaknya sedikit kode.Metode "terbaik" (benar secara formal) digunakan
git for-each-ref
untuk mendapatkan nama cabang:tetapi lebih sulit lagi untuk mencari tahu di cabang mana Anda berada (
git symbolic-ref HEAD
apakah metode yang "secara formal benar" untuk ini, jika Anda ingin menulis skrip mewah).Lebih mudahnya, Anda dapat menggunakan
git branch
, yang mencetak nama cabang lokal Anda diawali dengan dua spasi atau (untuk cabang saat ini) dengan tanda bintang*
. Jadi, jalankan ini melalui sesuatu untuk menghapus*
versi dan Anda ditinggalkan dengan nama cabang yang dipisahkan spasi, yang kemudian dapat Anda teruskan kegit branch -d
:atau:
Perhatikan bahwa huruf kecil
-d
tidak akan menghapus cabang "tidak digabungkan sepenuhnya" (lihat dokumentasi). Menggunakan-D
akan menghapus cabang seperti itu, bahkan jika ini menyebabkan komit menjadi "hilang"; gunakan ini dengan sangat hati-hati, karena ini juga menghapus reflog cabang, sehingga hal-hal "memulihkan dari penghapusan tidak disengaja" yang biasa juga tidak berfungsi.sumber
git branch -D $(git branch | grep -v '^*')
, jika Anda ingin menghapus cabang-cabang yang telah digabungkan.Untuk menghapus semua cabang yang digabungkan (kecuali yang sekarang
-v ‘*’
):juga saya membuat perintah seperti itu untuk pembersihan lengkap repo:
diambil dari sini .
sumber
Hapus semua cabang kecuali cabang tertentu :
Hapus semua cabang lokal kecuali develop dan master
sumber
Untuk Windows, dalam penggunaan Powershell:
sumber
Saya pernah membuat konstruksi ini untuk lingkungan Windows saya. Mungkin itu akan membantu orang lain. Selama eksekusi, master dan cabang saat ini tidak dihapus . Semua cabang gabungan lainnya akan dihapus.
sumber
Untuk menghapus semua cabang kecuali cabang saat ini dalam satu langkah:
git branch | grep -v $(git rev-parse --abbrev-ref HEAD) | xargs git branch -D
sumber
Hapus semua cabang yang digabungkan secara lokal:
Hapus semua cabang kecuali cabang tertentu :
Hapus semua cabang lokal kecuali develop dan master
sumber
Dengan asumsi
git branch
menunjukkan cabang saat ini diawali dengan*
; Menggunakan Powershell, satu liner berikut akan menghapus semua cabang yang tidak dimulai*
.git branch | ? { $_ -lt "*" } | % { git branch -D $_.Trim() }
?
= Dimana-Objek%
= Objek-depansumber
Jadi saya melihat banyak nama cabang yang dikodekan dengan keras di sini ... Dan saya pikir jawaban saya di sini lebih akurat untuk bagian "cabang saat ini" dari pertanyaan sambil menjaganya tetap satu baris dan dapat dibaca untuk menjelekkan pemula seperti saya. Hanya untuk menempatkan kredit di tempat yang seharusnya, jawabannya agak jelas juga berdasarkan jawaban @ pankijs.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
dan saya memilikinya alias di satu baris di .bash_aliases saya di debian juga.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(Meskipun saya pikir beberapa fitur bash perlu diaktifkan agar sub perintah dapat berjalan pada beberapa baris perintah)
sumber
Saya menggunakan ini karena saya menjadi lebih selektif dalam hal yang tidak ingin saya hapus. Perintah di bawah ini menghapus setiap cabang kecuali master, develop dan cabang saat ini.
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D) echo $BRANCHES
Jadi saya taruh ini di saya
~/.zshrc
sumber
IMHO, cara paling aman untuk menghapus cabang lokal adalah:
Juga, info lebih lanjut terkait dengan topik ini Anda dapat menemukan Hapus semua cabang git lokal
sumber
gone
penanda Anda harus menggunakan-vv
(verbose dua kali), sementara-a
tidak akan membantu Anda (daftar juga cabang jarak jauh)