Je recommande d'utiliser git branch --format
pour spécifier la sortie exacte que vous souhaitez obtenir de la git branch
commande. En faisant cela, vous pouvez extraire seulement le nom de référence et l'amont, comme ceci :
git branch --format "%(refname:short) %(upstream)"
Il produit les branches ainsi que les branches distantes si elles existent, dans le format suivant :
25-timeout-error-with-many-targets
31-target-suggestions refs/remotes/origin/31-target-suggestions
54-feedback-link refs/remotes/origin/54-feedback-link
65-digest-double-publish
Une fois que vous avez obtenu cette sortie joliment formatée, il suffit de la faire passer par le canal awk
pour obtenir votre liste :
git branch --format "%(refname:short) %(upstream)" | awk '{if (!$2) print $1;}'
Le résultat est le suivant :
25-timeout-error-with-many-targets
65-digest-double-publish
El awk
imprime la première colonne s'il n'y a pas de deuxième colonne.
Bonus : créer un alias
Pour faciliter l'exécution, créez un alias dans votre fichier global. .gitconfig
(ou ailleurs) :
[alias]
local-branches = "!git branch --format '%(refname:short) %(upstream:short)' | awk '{if (!$2) print $1;}'"
Bonus : Filtrage à distance
Si, pour une raison ou une autre, vous avez plusieurs télécommandes de suivi pour différentes branches, il est assez facile de spécifier à quelle télécommande vous voulez faire la vérification. Il suffit d'ajouter le nom du distant au motif awk. Dans mon cas, c'est origin
pour que je puisse faire ça :
git branch --format "%(refname:short) %(upstream)" | awk '$2 !~/\/origin\// { print $1 }'
Important : la barre oblique inverse doit être échappée dans l'alias, sinon vous aurez un fichier gitconfig invalide.
Réponse précédente
La réponse précédente était fonctionnellement similaire, mais utilisait les éléments suivants comme point de départ. Au fil du temps, des commentateurs ont fait remarquer qu'une regex n'était pas fiable en raison de la variance possible dans un message de livraison, aussi je ne recommande plus cette méthode. Mais, la voici pour référence :
J'ai récemment découvert git branch -vv
qui est la version "très verbeuse" de la fonction git branch
commandement.
Il produit les branches ainsi que les branches distantes si elles existent, dans le format suivant :
25-timeout-error-with-many-targets 206a5fa WIP: batch insert
31-target-suggestions f5bdce6 [origin/31-target-suggestions] Create target suggestion for team and list on save
* 54-feedback-link b98e97c [origin/54-feedback-link] WIP: Feedback link in mail
65-digest-double-publish 2de4150 WIP: publishing-state
Une fois que vous avez obtenu cette sortie joliment formatée, il suffit de la faire passer par le canal cut
y awk
pour obtenir votre liste :
git branch -vv | cut -c 3- | awk '$3 !~/\[/ { print $1 }'