Eliminar las ramas de seguimiento ya no en remoto
¿Existe una forma sencilla de eliminar todas las ramas de seguimiento cuyo equivalente remoto ya no existe?
Ejemplo:
Ramas (locales y remotas)
- maestro
- origen / maestro
- origin / bug-fix-a
- origin / bug-fix-b
- origin / bug-fix-c
Localmente, solo tengo una rama maestra. Ahora necesito trabajar en bug-fix-a, así que lo compruebo, trabajo en él y envío cambios al control remoto. A continuación hago lo mismo con bug-fix-b.
Ramas (locales y remotas)
- maestro
- bug-fix-a
- bug-fix-b
- origen / maestro
- origin / bug-fix-a
- origin / bug-fix-b
- origin / bug-fix-c
Ahora tengo ramas locales maestro, bug-fix-a, bug-fix-b . El mantenedor de la rama Master fusionará mis cambios en master y eliminará todas las ramas que ya haya fusionado.
Así que la corriente el estado es ahora:
Ramas (locales y remotas)
- maestro
- bug-fix-a
- bug-fix-b
- origen / maestro
- origin / bug-fix-c
Ahora me gustaría llamar a algún comando para eliminar ramas (en este caso bug-fix-a, bug-fix-b ), que ya no están representados en el repositorio remoto.
Sería algo así como el comando existente git remote prune origin
, pero más como git local prune origin
.
25 answers
git remote prune origin
poda las ramas de seguimiento no en el control remoto.
git branch --merged
muestra las ramas que se han fusionado en la rama actual.
xargs git branch -d
elimina las ramas listadas en la entrada estándar.
Tenga cuidado al eliminar las ramas listadas por git branch --merged
. La lista podría incluir master
u otras ramas que prefiera no eliminar.
Para darte la oportunidad de editar la lista antes de eliminar ramas, puedes hacer lo siguiente en una línea:
git branch --merged >/tmp/merged-branches && vi /tmp/merged-branches && xargs git branch -d </tmp/merged-branches
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-13 22:02:21
Después del comando
git fetch -p
Elimina las referencias remotas cuando ejecuta
git branch -vv
Mostrará 'ido' como el estado remoto. Por ejemplo,
$ git branch -vv
master b900de9 [origin/master: behind 4] Fixed bug
release/v3.8 fdd2f4e [origin/release/v3.8: behind 2] Fixed bug
release/v3.9 0d680d0 [origin/release/v3.9: behind 2] Updated comments
bug/1234 57379e4 [origin/bug/1234: gone] Fixed bug
Por lo que puede escribir un script simple para eliminar las ramas locales que se han ido controles remotos:
git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-21 10:45:22
La mayoría de estas respuestas no responden realmente a la pregunta original. Hice un montón de excavación y esta fue la solución más limpia que encontré. Aquí hay una versión un poco más completa de esa respuesta:
- Echa un vistazo a tu rama predeterminada. Normalmente
git checkout master
- Corre
git fetch -p && git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -d
Explicación:
Funciona podando sus ramas de seguimiento y luego borrando las locales que muestran que se han " ido " en git branch -vv
.
Notas:
Si su idioma está configurado en algo que no sea inglés, tendrá que cambiar gone
a la palabra apropiada. Las ramas que son locales solamente no serán tocadas. Las ramas que se han eliminado en remoto pero no se han fusionado mostrarán una notificación pero no se eliminarán en local. Si también desea eliminarlos, cambie -d
a -D
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-20 15:02:28
Parece que la solución está aquí – https://stackoverflow.com/a/1072178/133986
En resumen, git remote prune
hace la magia
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:45
Encontré la respuesta aquí: ¿Cómo puedo eliminar todas las ramas de git que se han fusionado?
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
Asegúrate de mantener al maestro
Puede asegurarse de que master
, o cualquier otra rama para el caso, no se elimine añadiendo otro grep
después de la primera. En ese caso dirías:
git branch --merged | grep -v "\*" | grep -v "YOUR_BRANCH_TO_KEEP" | xargs -n 1 git branch -d
Así que si queríamos mantener master
, develop
y staging
por ejemplo, íbamos a:
git branch --merged | grep -v "\*" | grep -v "master" | grep -v "develop" | grep -v "staging" | xargs -n 1 git branch -d
Haz de esto un alias
Ya que es un poco largo, es posible que desee agregar un alias a su .zshrc
o .bashrc
. El mío se llama gbpurge
(para git branches purge
):
alias gbpurge='git branch --merged | grep -v "\*" | grep -v "master" | grep -v "develop" | grep -v "staging" | xargs -n 1 git branch -d'
Luego vuelva a cargar su .bashrc
o .zshrc
:
. ~/.bashrc
O
. ~/.zshrc
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:00
Normalmente no respondería a una pregunta que ya tiene 16 respuestas, pero todas las demás respuestas son incorrectas, y la respuesta correcta es muy simple. La pregunta dice: "¿Hay una manera sencilla de eliminar todas las ramas de seguimiento cuyo equivalente remoto ya no existe?"
Si "simple" significa no frágil, no peligroso, y sin depender de herramientas que no todos los lectores tendrán, entonces la respuesta correcta es: no.
Algunas respuestas son simples, pero no hacen lo que se les pidió. Otros lo hacen lo que se preguntó, pero no son simples: todos se basan en analizar la salida de Git (y la salida de porcelana para arrancar en la mayoría de los casos) a través de comandos de manipulación de texto o lenguajes de scripting, que pueden no estar presentes en todos los sistemas.
Lectura adicional: https://stackoverflow.com/a/20107184/587365 y https://stackoverflow.com/a/26152574/587365
Si desea hacer esto de forma segura, para el caso de uso en la pregunta (basura-recoger ramas de seguimiento que se han eliminado en el servidor, pero todavía existen como ramas locales) y con comandos de Git de alto nivel solamente, tienes que
-
git fetch --prune
(ogit fetch -p
, que es un alias, ogit prune remote origin
que hace lo mismo sin buscar, y probablemente no es lo que quieres la mayor parte del tiempo). - Tenga en cuenta cualquier rama remota que se notifique como eliminada. O, para encontrarlos más adelante,
git branch -v
(cualquier rama de seguimiento huérfana se marcará como "[gone]"). -
git branch -d [branch_name]
en cada seguimiento huérfano branch
Explicación de los antecedentes
Para entender lo que está sucediendo, debe darse cuenta de que, en la situación de seguimiento de ramas, no tiene una rama, sino tres. (Y tener en cuenta que una "rama" es una etiqueta para un puntero a un commit.)
Para una rama feature/X
, el repositorio remoto tendrá esta rama y llamar a feature/X
. Su repositorio local tiene una rama remotes/origin/feature/X
que significa, " Esto es lo que el servidor me dijo que era su rama feature/X, la última vez hablamos, " y finalmente, el repositorio local tiene una rama feature/X
que apunta a su última confirmación, y está configurado para "rastrear" remotes/origin/feature/X
, lo que significa que puede tirar y empujar para mantener los tres alineados.
En algún momento, alguien ha eliminado el feature/X
en el servidor. A partir de ese momento, te quedas con tu feature/X
local (que probablemente ya no quieras, ya que el trabajo en la característica X está presumiblemente terminado), y tu remotes/origin/feature/X
que es ciertamente inútil porque su único propósito era recordar el estado de la rama del servidor.
Y Git te permitirá limpiar automáticamente el remotes/origin/feature/X
redundante that eso es lo que hace el git fetch --prune
but pero por alguna razón, no te permite eliminar automáticamente tu propio feature/X
... a pesar de que su feature/X
todavía contiene la información de seguimiento huérfana, por lo que tiene la información para identificar las ramas de seguimiento anteriores que se han fusionado completamente. (Después de todo, puede darte la información que te permite hacer la operación a mano a ti mismo.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-02 10:29:40
Elimina todas las ramas que se han fusionado en master, pero no intentes eliminar master:
git checkout master && git pull origin master && git fetch -p && git branch -d $(git branch --merged | grep master -v)
O añadir un alias:
alias gitcleanlocal="git checkout master && git pull origin master && git fetch -p && git branch -d $(git branch --merged | grep master -v)"
Explicación:
git checkout master
checkout master branch
git pull origin master
asegúrese de que la rama local tiene todos los cambios remotos combinados
git fetch -p
eliminar referencias a ramas remotas que se han eliminado
git branch -d $(git branch master --merged | grep master -v)
elimine todas las ramas que se han fusionado en master, pero no intente eliminar master en sí
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-20 21:58:16
git fetch -p
Esto eliminará todas las ramas que no se rastrean de forma remota.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-17 15:20:30
Podría ser útil para algunos, una línea simple para borrar todas las ramas locales excepto master y develop
git branch | grep -v "master" | grep -v "develop" | xargs git branch -D
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-28 11:27:49
No creo que haya un comando incorporado para hacer esto, pero es seguro hacer lo siguiente:
git checkout master
git branch -d bug-fix-a
Cuando usas -d
, git se negará a eliminar la rama a menos que esté completamente fusionada con HEAD
o su rama de seguimiento remoto. Por lo tanto, siempre se puede hacer un bucle sobre la salida de git for-each-ref
y tratar de eliminar cada rama. El problema con ese enfoque es que sospecho que probablemente no desea que bug-fix-d
se elimine solo porque origin/bug-fix-d
contiene su historial. En su lugar, usted podría cree un script como el siguiente:
#!/bin/sh
git checkout master &&
for r in $(git for-each-ref refs/heads --format='%(refname:short)')
do
if [ x$(git merge-base master "$r") = x$(git rev-parse --verify "$r") ]
then
if [ "$r" != "master" ]
then
git branch -d "$r"
fi
fi
done
Advertencia: No he probado este script-use solo con cuidado...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-07 13:45:29
Esto eliminará todas las ramificaciones locales combinadas excepto la referencia maestra local y la que se está utilizando actualmente:
git branch --merged | grep -v "*" | grep -v "master" | xargs git branch -d
Y esto eliminará todas las ramas que ya han sido eliminadas del repositorio remoto referenciado por " origin", pero que todavía están disponibles localmente en " remotes/origin".
git remote prune origin
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-27 19:53:24
Solución de Windows
Para Microsoft Windows Powershell:
git checkout master; git remote update origin --prune; git branch -vv | Select-String -Pattern ": gone]" | % { $_.toString().Trim().Split(" ")[0]} | % {git branch -d $_}
Explicación
git checkout master
cambia a la rama master
git remote update origin --prune
ciruelas pasas ramas remotas
git branch -vv
obtiene una salida detallada de todas las ramas (git reference)
Select-String -Pattern ": gone]"
obtiene solo los registros donde se han eliminado del control remoto.
% { $_.toString().Trim().Split(" ")[0]}
obtener el nombre de la rama
% {git branch -d $_}
elimina la rama
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-26 10:56:47
La coincidencia de patrones para "gone" en la mayoría de las otras soluciones fue un poco aterradora para mí. Para ser más seguro, utiliza el indicador --format
para extraer el estado de seguimiento ascendente de cada rama.
Necesitaba una versión compatible con Windows, por lo que elimina todas las ramas que aparecen como "gone" usando Powershell:
git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname:short)%(end)" |
? { $_ -ne "" } |
% { git branch -D $_ }
La primera línea enumera el nombre de las ramas locales cuya rama ascendente está "desaparecida". La siguiente línea elimina las líneas en blanco (que son de salida para las ramas que no se han " ido"), a continuación, el nombre de la rama se pasa al comando para eliminar la rama.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-21 14:18:25
Basado en la información anterior, esto funcionó para mí:
git br -d `git br -vv | grep ': gone] ' | awk '{print $1}' | xargs`
Elimina todas las ramas locales con are ': gone] '
en remoto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-28 09:40:27
Yet-another-answer for the pile, drawing heavily from https://stackoverflow.com/a/48411554/2858703 (que me gusta porque parece eliminar cualquier ambigüedad sobre dónde gone]
coincidirá en la salida git branch
) pero agregando un * nix bent:
git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)" \
| sed 's,^refs/heads/,,;/^$/d' \
| xargs git branch -D
Tengo esto envuelto en un script git-gone
en mi camino:
#!/usr/bin/env bash
action() {
${DELETE} && xargs git branch -D || cat
}
get_gone() {
git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)" \
| sed 's,^refs/heads/,,;/^$/d'
}
main() {
DELETE=false
while [ $# -gt 0 ] ; do
case "${1}" in
(-[dD] | --delete) DELETE=true ;;
esac
shift
done
get_gone | action
}
main "${@}"
NB - La opción format format parece ser bastante nueva; necesitaba actualizar git desde la versión 2.10.algo a 2.16.3 para conseguirlo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-28 12:09:38
grep gone <(git branch -v) | cut -d ' ' -f 3 | xargs git branch -d
El comando anterior se puede usar para obtener ramas que se fusionan y eliminan en remoto y elimina la rama local que ya no está disponible en remoto
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-17 06:09:45
Nada de esto era realmente correcto para mí. Quería algo que purgara todas las ramas locales que estaban rastreando una rama remota, en origin
, donde la rama remota ha sido eliminada (gone
). No quería eliminar las ramas locales que nunca se configuraron para rastrear una rama remota (es decir, mis ramas de desarrollo locales). También quería un simple one-liner que solo use git
, u otras herramientas de CLI simples, en lugar de escribir scripts personalizados. Terminé usando un poco de grep
y awk
para hacer esto simple comando.
Esto es en última instancia lo que terminó en mi ~/.gitconfig
:
[alias]
prune-branches = !git remote prune origin && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -D
Aquí hay un comando git config --global ...
para agregar fácilmente esto como git prune-branches
:
git config --global alias.prune-branches '!git remote prune origin && git branch -vv | grep '"'"': gone]'"'"' | awk '"'"'{print $1}'"'"' | xargs -r git branch -d'
NOTA: En el comando config, uso la opción -d
para git branch
en lugar de -D
, como hago en mi configuración real. Utilizo -D
porque no quiero que Git se queje de ramas no fusionadas. Es posible que desee esta funcionalidad también. Si es así, simplemente use -D
en lugar de -d
al final de ese comando de configuración.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-14 12:17:31
Se me ocurrió este guión bash. Siempre mantenga las ramas develop
, qa
, master
.
git-clear() {
git pull -a > /dev/null
local branches=$(git branch --merged | grep -v 'develop' | grep -v 'master' | grep -v 'qa' | sed 's/^\s*//')
branches=(${branches//;/ })
if [ -z $branches ]; then
echo 'No branches to delete...'
return;
fi
echo $branches
echo 'Do you want to delete these merged branches? (y/n)'
read yn
case $yn in
[^Yy]* ) return;;
esac
echo 'Deleting...'
git remote prune origin
echo $branches | xargs git branch -d
git branch -vv
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-17 11:16:37
Esto funcionó para mí:
git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-19 05:11:05
No estoy seguro por cuánto tiempo, pero ahora uso git-up, que se encarga de eso.
Hago git up
y comienza a rastrear nuevas ramas y elimina las antiguas.
Solo para que quede claro, no está fuera de la caja comando git - https://github.com/aanand/git-up
Por cierto, también esconde dirty tree y hace rebases todavía con solo git up
.
Espero que sea útil para alguien
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-24 22:14:02
Aquí hay una solución que uso para la cáscara de pescado. Probado en Mac OS X 10.11.5
, fish 2.3.0
y git 2.8.3
.
function git_clean_branches
set base_branch develop
# work from our base branch
git checkout $base_branch
# remove local tracking branches where the remote branch is gone
git fetch -p
# find all local branches that have been merged into the base branch
# and delete any without a corresponding remote branch
set local
for f in (git branch --merged $base_branch | grep -v "\(master\|$base_branch\|\*\)" | awk '/\s*\w*\s*/ {print $1}')
set local $local $f
end
set remote
for f in (git branch -r | xargs basename)
set remote $remote $f
end
for f in $local
echo $remote | grep --quiet "\s$f\s"
if [ $status -gt 0 ]
git branch -d $f
end
end
end
Algunas notas:
Asegúrese de establecer el base_branch
correcto. En este caso utilizo develop
como la rama base, pero podría ser cualquier cosa.
Esta parte es muy importante: grep -v "\(master\|$base_branch\|\*\)"
. Se asegura de que no elimine master o su rama base.
Utilizo git branch -d <branch>
como precaución adicional, para no eliminar ninguna rama que no se haya fusionado completamente con upstream o current CABEZA.
Una manera fácil de probar es reemplazar git branch -d $f
por echo "will delete $f"
.
Supongo que también debería agregar: ¡ÚSELO BAJO SU PROPIO RIESGO!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-30 21:22:29
Utilizo un método corto para hacer el truco, te recomiendo que hagas lo mismo ya que podría ahorrar algunas horas y darte más visibilidad
Simplemente agregue el siguiente fragmento en su .bashrc (.bashprofile en macos).
git-cleaner() { git fetch --all --prune && git branch --merged | grep -v -E "\bmaster|preprod|dmz\b" | xargs -n 1 git branch -d ;};
- Obtener todos los controles remotos
- Obtener solo ramas fusionadas de git
- Elimine de esta lista las ramas "protegidas / importantes"
- Eliminar el resto (por ejemplo, limpiar y fusionar ramas)
Tendrás Que editar el regex grep con el fin de adaptarse a sus necesidades (aquí, evitar maestro, preprod y dmz de eliminación)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-07 14:33:38
Basado en Sugerencia de Git: Eliminar Antiguas Ramas Locales, que se parece a jason.solución de rickman Implementé un comando personalizado para este propósito llamado git gone usando Bash:
$ git gone
usage: git gone [-pndD] [<branch>=origin]
OPTIONS
-p prune remote branch
-n dry run: list the gone branches
-d delete the gone branches
-D delete the gone branches forcefully
EXAMPLES
git gone -pn prune and dry run
git gone -d delete the gone branches
git gone -pn
combina la poda y la lista de las ramas "desaparecidas":
$ git gone -pn
bport/fix-server-broadcast b472d5d2b [origin/bport/fix-server-broadcast: gone] Bump modules
fport/rangepos 45c857d15 [origin/fport/rangepos: gone] Bump modules
Entonces puedes apretar el gatillo usando git gone -d
o git gone -D
.
Notas
- La expresión regular que usé es
"$BRANCH/.*: gone]"
donde$BRANCH
normalmente seríaorigin
. Esto probablemente no funciona si tu salida de Git está localizada en francés, etc. - Sebastian Wiesner también lo portó a Rust para usuarios de Windows. Ese también se llama git gone.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-27 18:14:01
Utilizo este método para poder tener más control.
git branch -D $(git branch | grep -v "master" | grep -v "develop")
Esto es eliminar cualquier rama no nombrada: master
o develop
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-13 18:14:30
Esto va a eliminar todas las ramas remotas que no están presentes localmente (en ruby):
bs = `git branch`.split; bs2 = `git branch -r | grep origin`.split.reject { |b| bs.include?(b.split('/')[1..-1].join('/')) }; bs2.each { |b| puts `git push origin --delete #{b.split('/')[1..-1].join('/')}` }
Explicado:
# local branches
bs = `git branch`.split
# remote branches
bs2 = `git branch -r | grep origin`.split
# reject the branches that are present locally (removes origin/ in front)
bs2.reject! { |b| bs.include?(b.split('/')[1..-1].join('/')) }
# deletes the branches (removes origin/ in front)
bs2.each { |b| puts `git push origin --delete #{b.split('/')[1..-1].join('/')}` }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-07 18:48:14