Cómo eliminar twigs de function que ya está característica completada

¿Cómo eliminar las twigs de function que ya están completadas?

En mi máquina local cuando ejecuto 'git branch' todavía veo twigs antiguas que ya no existen en el repository remoto.

Intenté ejecutar: 'git fetch -p'

Dice eliminado en alguna twig, pero cuando ejecuto 'git branch', todavía están allí.

¿Hay alguna manera de eliminarlos todos con un command?

En git, tienes "twigs", que son tuyas y solo tuyas; y luego tienes "twigs remotas", que -a pesar del nombre- son en realidad locales, pero son bases creadas y eliminadas en las twigs que tu git ve cada vez que contacta a un git remoto y le pregunta: "hey, ¿qué twigs tienes sobre ¿ahí?"

Cuando ejecuta git fetch -p se pone en contacto con su control remoto (generalmente origin ) y obtiene su list de twigs, y luego elimina las twigs remotas que se han ido en el control remoto.

Cuando existe una feature twig remota y usted hace la git checkout feature , eso crea una twig local llamada feature , que "rastrea" su twig remota conocida como origin/feature . Cuando ellos, en el control remoto, eliminan su feature , su git fetch -p solo borra la twig remote/feature . De modo que no queda nada para que rastree su sucursal local, pero git fetch no eliminará su feature local, solo el origin/feature . El hecho de que hayan terminado con el suyo no significa que haya terminado con el suyo.

Si ha terminado con el suyo, simplemente debe eliminarlo usted mismo:

 git branch -d feature 

Esto le dará un post de error si hay algunos commit (s) que se convertirán en "inalcanzables". Si lo hace, pero de todos modos está seguro de que desea eliminarlo, use una eliminación de mayúsculas-D:

 git branch -D feature 

para eliminarlo de todos modos. Tenga cuidado, ya que un error tipográfico que borra lo incorrecto puede ocasionar terribles horas de recuperación.


Editar para agregar, por comentarios en la publicación original: si desea automatizar la eliminación de las sucursales locales que tienen un set en sentido ascendente, pero el flujo ascendente se ha ido, necesitaría un script para hacerlo. Es probable que algo como esto (totalmente no probado) funcione:

 #! /bin/sh git for-each-ref --format '%(refname:short)' refs/heads | while read branch; do # $branch is the local branch, see if it has an upstream configunetworking remote=$(git config --get branch.$branch.remote) || continue upstream=$(git config --get branch.$branch.merge) || continue # $branch is configunetworking with an upstream [ "$remote" = "." ] && continue # upstream is local: skip # If remote branch still exists, skip this local branch. # Note: assumes remote.$remote.fetch = +refs/heads/*:refs/remotes/$remote/* # We could try to parse remote.$remote.fetch lines but that is too hard # for me to just type in as a throwaway script on SO. git rev-parse -q --verify $remote/$upstream >/dev/null && continue echo "$branch is configunetworking to track $remote/$upstream but that's gone" echo "I'll try a safe delete here" git branch -d $branch done 

(No usaría git branch -D aquí, eso es demasiado peligroso).

Encontré algo que puede eliminar todas las twigs obsoletas:

 git branch --merged | xargs git branch -d