Çıktısında listelenen tüm dalları silmek istiyorum ...
$ git branch
... ancak mevcut şubeyi tek adımda tutmak . Mümkün mü? Öyleyse nasıl?
Çıktısında listelenen tüm dalları silmek istiyorum ...
$ git branch
... ancak mevcut şubeyi tek adımda tutmak . Mümkün mü? Öyleyse nasıl?
Yanıtlar:
@Pankijs cevabına dayanarak, iki git takma adı yaptım:
[alias]
# Delete all local branches but master and the current one, only if they are fully merged with master.
br-delete-useless = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -d;\
}; f"
# Delete all local branches but master and the current one.
br-delete-useless-force = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -D;\
}; f"
Eklenecek ~/.gitconfig
Ve @torek'in belirttiği gibi:
Küçük
-d
harfin "tam olarak birleştirilmemiş" bir dalı silmeyeceğini unutmayın (belgelere bakın). Kullanılması-D
bu tür dalları siler , bu işlemlerin "kaybolmasına" neden olsa bile; bunu büyük bir özenle kullanın , çünkü bu, daldaki yeniden logları da siler, böylece olağan "kazara silme işleminden kurtarma" işleri de işe yaramaz.
Temel olarak, -force
önemli bir şeyi kaybetmeyeceğinizden% 300 emin değilseniz , sürümü asla kullanmayın . Çünkü sonsuza dek kayboldu .
git branch branchname commitid
$ git branch | grep -v "master" | xargs git branch -D
ana dal hariç tüm dalları siler (ana dalı, korumak istediğiniz dalla değiştirin, ancak sonra ana birim silinir)
grep -v ^*
.
master-copy
, örneğin
grep -v "^ *master$"
grep -v "master\|my-other-branch"
.
ilk (tutmak istediğiniz şubeye geçin> ex : master ):
git checkout master
ikinci ( usta olduğunuzdan emin olun )
git branch -D $(git branch)
git branch -D $(git branch).Trim()
.
$(git branch)
alıntı yapmamız gerekiyor mu? Bu çalışmıyor: hata: dal '$ (git' bulunamadı. Hata: dal 'dal)' bulunamadı.
git branch -d
(veya -D
) birden çok şube adına izin verir, ancak en azından biraz kod yazmadan "şu anda bulunduğum dışındaki tüm yerel şubeleri" otomatik olarak sağlamak biraz zordur.
"En iyi" (resmi olarak doğru) yöntem, git for-each-ref
şube adlarını almak için kullanmaktır :
git for-each-ref --format '%(refname:short)' refs/heads
ama o zaman hangi dalda olduğunuzu anlamak daha da zordur ( git symbolic-ref HEAD
süslü bir senaryo yazmak istiyorsanız, bunun için "resmi olarak doğru" yöntemdir).
Daha rahat bir şekilde, git branch
yerel şube adlarınızı önünde iki boşluk bırakarak veya (geçerli dal için) bir yıldız işaretiyle yazdıran seçeneğini kullanabilirsiniz *
. Öyleyse, *
sürümü kaldırmak için bunu bir şeyden geçirin ve boşlukla ayrılmış dal adlarıyla kalırsınız, daha sonra bunlara geçebilirsiniz git branch -d
:
git branch -d $(git branch | grep -v '^*')
veya:
git branch | grep -v '^*' | xargs git branch -d
Küçük harf olduğunu unutmayın -d
harfin "tam olarak birleştirilmemiş" bir dalı silmeyeceğini (belgelere bakın). Kullanılması -D
bu tür dalları siler, bu işlemlerin "kaybolmasına" neden olsa bile; bunu büyük bir özenle kullanın, çünkü bu, daldaki yeniden logları da siler, böylece olağan "kazara silme işleminden kurtarma" işleri de işe yaramaz.
git branch -D $(git branch | grep -v '^*')
Birleşen dalları silmek istiyorsanız, öyle olmalıdır .
Tüm birleştirilmiş dalları kaldırmak için (şu anki hariç -v ‘*’
):
git branch --merged | grep -v '*' | xargs git branch -D
ayrıca repo tam temizleme için böyle bir komut verdim:
alias git-clean="git branch | grep -v '*' | grep -v 'master' | xargs git branch -D && git reset --hard && git clean -d -x -f"
buradan alınır .
Belirli bir dal dışındaki tüm dalları silin :
git branch | grep -v "branch name" | xargs git branch -D
Develop ve master dışında tüm yerel şubeleri sil
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
Windows için Powershell'de şunları kullanın:
git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }
Bu yapıyı bir keresinde Windows ortamım için yaratmıştım. Belki başkasına yardımcı olur. Yürütme sırasında, ana dal ve geçerli dal silinmez . Birleştirilmiş diğer tüm dallar ne olursa olsun silinecektir.
@echo off
cd PATH_TO_YOUR_REPO
REM -- Variable declerations
set "textFile=tempBranchInfo.txt"
set "branchToKeep=master"
set "branchToReplaceWith="
git branch --merged > %textFile%
REM -- remove "master" from list to keep the branch
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%textFile%" echo(!line:%branchToKeep%=%branchToReplaceWith%!
endlocal
)
REM -- execute branch delete commands
for /f "delims=" %%a in (%textFile%) do (
git branch -D %%a
)
REM -- remove temp-file with branch information inside
DEL %textFile%
REM -- show local branches after the cleaning
echo Local branches:
git branch
pause
exit
Yerel olarak birleştirilmiş tüm şubeleri silin:
git branch -D `git branch --merged | grep -v \* | xargs`
Belirli bir dal dışındaki tüm dalları silin :
git branch | grep -v "branch name" | xargs git branch -D
Develop ve master dışında tüm yerel şubeleri sil
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
Bunu kullanıyorum çünkü silmek istemediğim şeyde daha seçici oluyorum. Aşağıdaki komut, master, development ve current branch hariç her dalı kaldırır.
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
Bu yüzden bunu benim ~/.zshrc
delete_branches() {
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
}
alias cleanup_branches=delete_branches
Bu yüzden burada birçok sabit kodlanmış dal adı görüyorum ... Ve bence buradaki cevabım, sorunun "mevcut dal" kısmına daha doğru olurken, onu tek satırda tutuyor ve benim gibi yeni başlayanları basmak için okunabilir. Verilmesi gereken yere krediyi koymak için, cevap oldukça açık bir şekilde @ pankijs'in cevabına dayanıyor.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
ve debian'daki .bash_aliases'imde bir satıra takma ad verdim.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(Alt komutun bazı komut satırlarında çalışması için bazı bash özelliklerinin etkinleştirilmesi gerektiğini düşünmeme rağmen)
IMHO, yerel şubeleri kaldırmanın en güvenli yolu:
git branch -av | grep "\[gone\]" | awk '{print $1}' | xargs git branch -d
Ayrıca, bu konuyla ilgili daha fazla bilgi bulabilirsiniz Tüm yerel git şubelerini sil
gone
kullanmanız gereken işaretleyici -vv
ederken, (ayrıntılı iki kez) -a
size yardımcı olmayacaktır (o da uzak dalları listeler)