Em resumo;
- Como posso excluir vários controles remotos mesclados?
Mais informações;
Eu tenho um repositório git com dezenas de remotos que foram mesclados no master. Posso excluir esses controles remotos um de cada vez usando:
git push --delete origin myBranch-1234
No entanto, este é um processo lento e tedioso para todos os controles remotos. Então, estou tentando este comando:
git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete
git branch -r --merged
lista todos os controles remotos mesclados.
grep origin
diz ao comando para incluir a origem.
grep -v master
diz ao comando para excluir o mestre.
xargs git push origin --delete
diz ao comando para excluir a lista de controles remotos.
Todos juntos, espero que isso reúna todos os controles remotos mesclados e os exclua.
Quando executo o comando acima, recebo o seguinte para cada controle remoto mesclado;
error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc
No entanto, esses controles remotos existem e posso verificar cada um deles. Muitos sites e pessoas recomendam que eu corra git fetch --prune
para limpar as referências ausentes. Isso não faz nada porque todos esses controles remotos existem.
Então eu pergunto a você, querida troca de pilha;
- Por que posso excluir um controle remoto, mas não muitos?
- Meu comando está correto?
Acho que estou perdendo algo pequeno. Cada vez que pesquiso isso, parece que estou fazendo corretamente, mas estou recebendo os erros acima.
fonte
--prune
? Na minha opinião, isso é muito enganadororigin/
nos nomes dos ramos, conforme descrito / resolvido em outras respostas.Esses ramos são removidos do remoto (origem)? Se sim, você pode simplesmente fazer
Caso contrário, eles podem retornar mesmo depois de excluí-los localmente.
Atualização: Olhando novamente para o seu comando, parece que você está compilando-o incorretamente. Você provavelmente quer
mas em vez disso, você está fazendo algo como
fonte
git branch -r --merged
e, em seguida, estou tentando excluí-los comxargs git push origin --delete
. O comando está tentando excluir os controles remotos, mas acredita que oremote ref does not exist
.xargs
para ver o que é realmente executado.origin/
prefixo no nome do branch, git já sabe que você está trabalhando com os branches de origem desde que você está executandogit push origin
. A sugestão de Mykola foi fazer a última parte do comandoxargs echo
, ao invés deecho xargs [...]
.Use
sed
para remover a parte 'origin /' e alterar umaxargs
parte lttile .fonte