web-dev-qa-db-fra.com

Dans Git, liste les noms des branches avec des commits non pushés

Dans le cas d'un projet comportant plusieurs branches locales, chacune effectuant le suivi d'une branche distante, existe-t-il une commande qui répertorie toutes les branches ayant des validations non traitées? (C'est-à-dire, même si aucune de ces branches n'est extraite.)

Je ne veux pas voir les commits eux-mêmes, je ne veux pas non plus voir les branches mises à jour, je veux juste voir quelles branches sont en avance sur leurs télécommandes.

J'ai essayé git log --branches --not --remotes --simplify-by-decoration --decorate --oneline, mais cela ne semble pas indiquer ce dont j'ai besoin. L'exécuter sur mon référentiel actuel ne donne aucun résultat, mais l'exécution de git status sur ma branche actuelle montre Your branch is ahead of 'Origin/branchname' by 2 commits.

git for-each-ref --format="%(refname:short) %(Push:track)" refs/heads et git branch -v affichent tous les deux des branches à jour ainsi que des branches nécessitant une poussée. Cependant, ils do affichent tous deux ma branche actuelle sous la forme [ahead 2].

D'autres commandes que j'ai trouvées, par exemple. git log @{u}.., git cherry -v liste les commits eux-mêmes, pas les branches.

Question secondaire: pourquoi la sortie de git log --branches --not --remotes --simplify-by-decoration --decorate --oneline n'inclut-elle pas les branches que git branch -v indique comme étant à venir? L’ancienne commande n’a-t-elle pas seulement à regarder quel refs/heads ne correspond pas à une télécommande connue? alors une succursale listée comme [ahead 2] ne répondrait-elle pas à ce critère?

28
detly

L'option --no-walk de log semble mieux faire ce dont j'ai besoin que --simplify-by-decoration. Ma commande complète est:

git log --branches --not --remotes --no-walk --decorate --oneline

... que j'ai aliasé à unpushed.

23
detly
git for-each-ref --format="%(refname:short) %(Push:track)" refs/heads

Cela reste la réponse la plus précise que vous pouvez facilement analyser/grep pour obtenir le résultat souhaité (comme supprimer des branches à jour)

Vous pouvez le faire dans un script bash que vous appellerez git-xxx (sans extension), quelque part dans votre $PATH ou %PATH%.
Ce script peut ensuite être appelé avec git xxx et utilisera git bash.
C'est un ordinateur portable qui fonctionne sur toutes les plateformes (même sous Windows, où <Git For Windows>/usr/bin inclut plus de 200 commandes linux (grep, sed, awk, xargs, ...)

9
VonC

Vous pouvez également voir quelles branches ne sont pas encore fusionnées à maîtriser

git checkout master

et alors

git branch --no-merged
0
Danon