Ištrinkite vietinius „Git“ filialus, juos ištrindami į nuotolinį repo

Noriu, kad vietos ir nuotolinės saugyklos visada sinchronizuotų filialus.

Peržiūrėję užklausą „github“, aš sujungiu ir ištrinu filialą (ištrintas). Kaip gauti šią informaciją savo vietinėje saugykloje ir gauti „Git“ pašalinti savo vietinę filialo versiją?

150
01 авг. rinkinys sf89 01 rug . 2013-08-01 03:04 '13, 03:04 2013-08-01 03:04
@ 11 atsakymų

Greitas būdas

 git branch --merged | grep -v "\*" | xargs -n 1 git branch -d 

Pastaba: jei esate ne master , tai galite ištrinti filialą. Laikykitės „geriausio būdo“.

Įsitikinkite, kad išsaugosime šeimininką.

Galite įsitikinti, kad master ar bet kuris kitas filialas, jei ne, būtų pašalintas grep daugiau. Tokiu atveju turėtumėte eiti:

 git branch --merged | grep -v "\*" | grep -v "YOUR_BRANCH_TO_KEEP" | xargs -n 1 git branch -d 

Taigi, jei norime išlaikyti master , pavyzdžiui, develop ir pastatyti, eisime:

 git branch --merged | grep -v "\*" | grep -Ev "(\*|master|develop|staging)" | xargs -n 1 git branch -d 

Padarykite jį slapyvardžiu

Kadangi jis yra šiek tiek ilgesnis, galite pridėti slapyvardį .zshrc arba .bashrc . Kasyklą vadina gbpurge ( git branches purge ):

 alias gbpurge='git branch --merged | grep -Ev "(\*|master|develop|staging)" | xargs -n 1 git branch -d' 

Tada įkelkite .bashrc arba .zshrc :

 . ~/.bashrc 

arba

 . ~/.zshrc 
167
01 авг. atsakymas pateikiamas sf89 01 rug . 2013-08-01 10:30 '13, 10:30, 2013-08-01 10:30

Aš naudoju tą patį srautą iš „GitHub“ ir neradau ankstesnių atsakymų, atitinkančių mane, nes git branch --merged išvardija filialus, kurie buvo sujungti, bet ne kiekvienas iš jų buvo pašalintas nuotoliniu būdu. Taigi jis dirbo man:

git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d

kur:

  • git fetch --all -p : atnaujinti vietinių filialų būseną
  • git branch -vv : nurodykite vietinių filialų statusą
  • grep ": gone]" : pašalinkite filtrus
  • awk '{ print $1 }' : išrinkite jų pavadinimus
  • xargs -n 1 git branch -d : perduoti pavadinimą ištrynimo komandai

Pastaba: jei norite, galite naudoti -d, o ne -d, kuri priverstinai ištrina.

Pavyzdžiui:

 someUsr@someHost:~/repo$ git branch -a basic-testing integration-for-tests * master origin playground-for-tests test-services remotes/origin/HEAD -> origin/master remotes/origin/basic-testing remotes/origin/master remotes/origin/test-services someUsr@someHost:~/repo$ git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d Fetching origin Deleted branch integration-for-tests (was fbc609a). Deleted branch playground-for-tests (was 584b900). someUsr@someHost:~/repo$ git branch -a basic-testing * master origin test-services remotes/origin/HEAD -> origin/master remotes/origin/basic-testing remotes/origin/master remotes/origin/test-services 

Pagalba:

http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches

71
19 янв. Atsakymą pateikė Alessio 19 d. 2015-01-19 11:50 '15 at 11:50 2015-01-19 11:50

pabandykite:

 git pull --prune

kuris ištrina jūsų vietinį skyrių, jei jo nuotolinis filialas yra ištrintas.

Atnaujinta:

Anksčiau pateiktas teiginys neteisingas.

Tiesą sakant, „ git pull --prune veiks tik git pull --prune nuotolinio stebėjimo filialus , pvz.,

 nuotolinio valdymo pultas / kilmė / fff nuotolinio valdymo pultas / kilmė / dev nuotolinio valdymo pultai / kilmė / kapitonas

Tada galite paleisti git branch -r kad patikrintumėte nuotolinio stebėjimo šakas, esančias jūsų kompiuteryje. Tarkime, kad kairieji filialai:

 kilmė / dev kilmės / šeimininko

tai reiškia, kad origin/fff filialas pašalinamas.

Taigi, paleisdami git pull --prune tiesiog paleiskite:

git branch --merged | grep -vFf <(git branch -r | cut -d'/' -f2-)

Galite sužinoti visus vietinius padalinius, kurie:

  • ne daugiau korekcinių pašalintų filialų;
  • galima saugiai pašalinti.

tada <the command above> | xargs git branch -d <the command above> | xargs git branch -d gali pašalinti juos visus.

68
01 авг. atsakymas duotas nicky_zs 01 rug . 2013-08-01 03:11 '13, 03:11 am 2013-08-01 03:11

Taip turėtų būti vengiama ištrinti vedlio filialus ir plėtoti sprendimą:

 git branch --merged | egrep -v "^\*|master|development" | xargs -n 1 git branch -d 
22
07 нояб. Atsakymas pateikiamas Intrepid lapkričio 7 d. 2014-11-07 17:45 '14, 17:45 2014-11-07 17:45

Žmonėms, naudojantiems „powerhell“, tai atitinka atsakymą:

 git branch -vv | Select-String -Pattern ': gone]' | ForEach-Object{($_ -split "\s+")[1]} | %{ git branch -D $_ } 
  • Filtruokite visus trūkstamus filialus.
  • Skambinimas git branch -D kiekvienam iš rastų šakų
10
02 марта '16 в 1:47 2016-03-02 01:47 atsakymą pateikė amaechler kovo 2 d. 16 d. 1:47 2016-03-02 01:47

Niekas tai nebuvo man. Mano kitą atsakymą galite pamatyti čia: ngn-wiki.ru.site/questions/13716 / ...

Bet iš esmės dabar turiu jį savo ~/.gitconfig :

 [alias] prune-branches = !git remote prune origin  git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -d 
5
24 янв. Atsakymą pateikė Karl Wilbur Jan 24 2016-01-24 01:33 '16 at 1:33 2016-01-24 01:33

Labai paprastas sprendimas: pašalinkite vietinį repo ir vėl paleiskite konsolę. Jis gali neatrodyti labai elegantiškas, bet jis yra paprastas, ir jūs tikrai suprasite, ką darote neskaitydami žmogaus puslapio :-).

4
14 мая '15 в 0:37 2015-05-14 00:37 Atsakymas, kurį pateikė Mark van der Loo gegužės 14 d., 15 val. 0:37 2015-05-14 00:37

Parašiau šį vieno eilutės sąrašą, kad būtų rodomi visi vietiniai filialai, neturintys atitinkamo nuotolinio filialo:

 diff -u <(git branch|sed 's/..//') <(git branch -r|sed 's/..origin\///')|tail -n +4|sed -n "s/^-//p" - 

Po to pašalinkite šiuos vietinius filialus naudodami xargs :

 diff -u <(git branch|sed 's/..//') <(git branch -r|sed 's/..origin\///')|tail -n +4|sed -n "s/^-//p" -|xargs -r git branch -d 
1
01 июня '16 в 18:48 2016-06-01 18:48 atsakymas pateikiamas ks1322 birželio 1 d. 16 d. 18:48 2016-06-01 18:48

Tai tiesiog padarysiu, kad pašalintumėte susijungusius vietinius filialus:

 git branch -d $(git branch --merged) 

ir, jei norite ištrinti neaktyvų stebėjimą:

 git pull --prune 
1
07 дек. atsakymas pateikiamas alacambra 07 dec. 2017-12-07 10:57 '17 at 10:57 2017-12-07 10:57

Jei baigėte vedlį, kai tik spustelėjote ir sujungėte savo filialą, atlikite šiuos veiksmus:

 git branch -d branch_name_to_delete 

Jei dabar esate šioje temoje, jis grąžins jus į šeimininką. Šiuo metu

 git pull 
0
19 февр. Atsakymą pateikė Joshua Schlichting vasario 19 d. 2018-02-19 22:26 '18, 22:26 pm 2018-02-19 22:26

Balsuotas atsakymas turi galimybę pašalinti šeimininką. Pripažinkite praktinį pavyzdį.

Turėjau dvi filialas hemen_README ir hemen_BASEBOX funkcijoms, kurios buvo sujungtos į vystymąsi, o tada kūrimas buvo sujungtas su vedliu. Hemen_README ir hemen_BASEBOX funkcijų skyriai buvo ištrinti nuotoliniu būdu, tačiau vis dar rodomi vietoje. Be to, aš ne priimančiojoje vietoje, bet vystymuisi.

Šiuo atveju

  hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a * develop 671ad6c Merged in hemen_README (pull request #1) hemen_BASEBOX a535c0f added global exec paths to puppet manifest hemen_README ba87489 Updated Readme with considerable details master 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1) remotes/origin/hemen_BASEBOX a535c0f added global exec paths to puppet manifest remotes/origin/hemen_README ba87489 Updated Readme with considerable details remotes/origin/master 2f093ce Merged in develop (pull request #3) 

Taigi, jei paleisiu pirmiau nurodytą dalinę komandą

  hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch --merged | grep -v "\*" hemen_BASEBOX hemen_README master 

Atkreipkite dėmesį, kad jis taip pat rodo vedlį, kuris galiausiai bus ištrintas.

Bet kuriuo atveju galėjau tai padaryti. Aš pasidalinu savo sesija su jumis, kaip tai pasiekiau.

  hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git remote prune origin --dry-run Pruning origin URL: git@bitbucket.org:hemenkapadiapublic/vagrant-webdev.git * [would prune] origin/hemen_BASEBOX * [would prune] origin/hemen_README hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git remote prune origin Pruning origin URL: git@bitbucket.org:hemenkapadiapublic/vagrant-webdev.git * [pruned] origin/hemen_BASEBOX * [pruned] origin/hemen_README 

Aš tiesiog patikrinau, kad jis bus apkarpytas ir tada apkarpomas. žvelgdami į žemiau esančią komandinę eilutę, pasirūpinome nuotolinio valdymo pultu

  hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a * develop 671ad6c Merged in hemen_README (pull request #1) hemen_BASEBOX a535c0f added global exec paths to puppet manifest hemen_README ba87489 Updated Readme with considerable details master 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1) remotes/origin/master 2f093ce Merged in develop (pull request #3) 

Dabar eikite ir ištrinkite vietinius filialus.

  hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -d hemen_BASEBOX Deleted branch hemen_BASEBOX (was a535c0f). hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -d hemen_README Deleted branch hemen_README (was ba87489). 

Na, filialai bus.

  hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a * develop 671ad6c Merged in hemen_README (pull request #1) master 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1) remotes/origin/master 2f093ce Merged in develop (pull request #3) 
-2
04 июня '14 в 8:30 2014-06-04 08:30 atsakymą pateikė „ Hemen Kapadia “ birželio 14 d. 14 d. 8:30 2014-06-04 08:30

Žr. Kitus klausimus apie žymes arba užduoti klausimą