Je veux obtenir une liste de toutes les branches dans un référentiel Git avec les branches "les plus fraîches" en haut, où la branche "la plus fraîche" est celle qui a été validée le plus récemment (et est donc plus susceptible de l'être) Je veux faire attention).
Existe-t-il un moyen d'utiliser Git pour (a) trier la liste des branches par dernier commit, ou (b) obtenir une liste des branches avec la date de dernier commit de chacun, dans une sorte de format lisible par machine?
Dans le pire des cas, je pouvais toujours courir git branch
pour obtenir une liste de toutes les branches, analyser sa sortie, puis git log -n 1 branchname --format=format:%ci
pour chacune, obtenir la date de validation de chaque branche. Mais cela fonctionnera sur une boîte Windows, où la rotation d'un nouveau processus est relativement coûteuse, donc le lancement de l'exécutable Git une fois par branche pourrait devenir lent s'il y a beaucoup de branches. Existe-t-il un moyen de faire tout cela avec une seule commande?
la source
git for-each-ref
de Jakub Narębski: vous pouvez faire passer des branches distantes à larefs/remotes/
place derefs/heads/
(ou vous pouvez passer les deux, séparées par des espaces);refs/tags/
pour les balises, ou tout simplementrefs/
pour les trois types.for-each-ref
! Vous utiliserez directementgit branch --sort=-committerdate
: voir ma réponse ciRéponses:
Utilisez l'
--sort=-committerdate
option degit for-each-ref
;Également disponible depuis Git 2.7.0 pour
git branch
:Utilisation de base:
Résultat:
Utilisation avancée:
Résultat:
la source
--format=%(refname)
.git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname) %(committerdate) %(authorname)' | sed 's/refs\/heads\///g'
:shortname
?git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
. La page de manuel git-for-each-ref (1) indique: Pour un nom court non ambigu de l'annexe ref:short
.[alias]
section et je l'adore.br = for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
Liste des noms de branche Git, classés par commit le plus récent…
En développant la réponse de Jakub et le conseil de Joe , ce qui suit supprimera les "refs / heads /" afin que la sortie affiche uniquement les noms des branches:
Commander:
Résultat:
la source
--format=%(refname:short)
au lieu de compter surcut
.git rb
vous rappeler d'entourer la commande entre guillemets:git config --global alias.rb "for-each-ref --count=20 --sort=-committerdate refs/heads/ --format=\'%(refname:short)\'"
git branch
, donc obtenir une branche locale, distante ou toutes les branches fonctionne comme sur git-branch (ie -r, -a).git branch -r --sort=committerdate --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
Voici le code optimal, qui combine les deux autres réponses:
la source
git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(authorname) %(refname:short)'
Voici une commande simple qui répertorie toutes les branches avec les dernières validations:
Pour commander par commit le plus récent, utilisez
Source: http://git-scm.com/book/en/Git-Branching-Branch-Management
la source
git branch -av
si vous souhaitez également voir les succursales non locales.git branch -v
inclure la date de chaque commit répertorié?git branch -va --sort=-committerdate
montrer les succursales non locales, avec les dernières succursales modifiées en haut.J'utilise l'alias suivant:
recent = "!r(){git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'}; r"
qui produit:
Utilisez '|' séparer.
la source
column -ts'|'
et je dirigerais des caractères si le caractère virgule pouvait apparaître dans des horodatages relatifs dans votre environnement local.'%(HEAD) ...'
au début de la chaîne de formatage pour obtenir le même effet sans passer par lased
commande[alias] recent = !git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'
git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always|column -ts'|'}
J'ai pu faire référence aux exemples précédents pour créer quelque chose qui me convient le mieux.
la source
git for-each-ref --sort=-committerdate refs/heads/ refs/remotes --format='%(authordate:short) %(authorname) %(color:red)%(objectname:short) %(color:yellow)%(refname:short)%(color:reset) (%(color:green)%(committerdate:relative)%(color:reset))'
J'avais également besoin de couleurs, d'étiquettes et de références à distance sans doublons:
Parce que la citation peut être difficile, voici l'alias de Bash:
la source
| head -n20
à la fin. Si vous utilisez l'alias, assurez-vous que cela va dans les guillemets.Les autres réponses ne semblent pas permettre de passer
-vv
pour obtenir une sortie détaillée.Voici donc une ligne qui trie
git branch -vv
par date de validation, en préservant la couleur, etc.:Si vous souhaitez également imprimer la date de validation, vous pouvez utiliser cette version à la place:
Exemple de sortie:
C'est probablement plus divisible en plusieurs lignes:
Cela devrait également fonctionner avec d'autres arguments
git branch
, par exemple-vvr
pour répertorier les branches de suivi à distance, ou-vva
pour répertorier les branches de suivi à distance et locales.la source
-vv
peut être utile en effet, merci. Cependant, cette solution génère toujours de nouveaux processus pour chaque branche, ce que l'OP souhaitait éviter.git branch
fait, ne définit pas spécifiquement la signification de-vv
, mais seulement de-v
,-vv
devrait donc avoir la même chose que-v
.-v, -vv, --verbose
contient les éléments suivants:If given twice, print the name of the upstream branch, as well
git 2.7 (Q4 2015) introduira le tri des branches en utilisant directement
git branch
:voir commit aa3bc55 , commit aedcb7d , commit 1511b22 , commit f65f139 , ... (23 sept. 2015), commit aedcb7d , commit 1511b22 , commit ca41799 (24 sept. 2015), et commit f65f139 , ... (23 sept. 2015) par Karthik Nayak (
KarthikNayak
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 7f11b48 , 15 oct.2015 )En particulier, validez aedcb7d :
Make «
branch.c
» utilisation «ref-filter
» API pour Itère refs tri. Cela supprime la plupart du code utilisé pour lebranch.c
remplacer par des appels à laref-filter
bibliothèque ' '.Il ajoute l'option
--sort=<key>
:Ici:
Ou (voir ci-dessous avec Git 2.19)
Voir aussi commit 9e46833 (30 octobre 2015) par Karthik Nayak (
KarthikNayak
) .Aidé par: Junio C Hamano (
gitster
) .(Fusionné par Junio C Hamano -
gitster
- en commit 415095f , 03 nov.2015 )Avec Git 2.19, l'ordre de tri peut être défini par défaut.
git branch
prend en charge une configurationbranch.sort
, commegit tag
, qui avait déjà une configurationtag.sort
.Voir commit 560ae1c (16 août 2018) de Samuel Maftoul (``) .
(Fusionné par Junio C Hamano -
gitster
- dans commit d89db6f , 27 août 2018)Pour répertorier les branches distantes, utilisez
git branch -r --sort=objectsize
. L'-r
indicateur lui fait lister les branches distantes au lieu des branches locales.Avec Git 2.27 (Q2 2020), les variantes "
git branch
" et autres "for-each-ref
" acceptaient plusieurs--sort=<key>
options dans l'ordre croissant de priorité, mais il y avait quelques bris autour de la "--ignore-case
" gestion et bris d'égalité avec le refname, qui ont été corrigés.Voir commit 7c5045f , commit 76f9e56 (03 mai 2020) par Jeff King (
peff
) .(Fusionné par Junio C Hamano -
gitster
- en commit 6de1630 , 08 mai 2020)la source
-r
J'aime utiliser une date relative et raccourcir le nom de la branche comme ceci:
Ce qui vous donne une sortie:
Je recommande de créer un fichier Bash pour ajouter tous vos alias préférés, puis de partager le script avec votre équipe. Voici un exemple pour ajouter juste celui-ci:
Ensuite, vous pouvez simplement le faire pour obtenir une liste de branches locales bien formatée et triée:
Mise à jour: faites ceci si vous voulez colorier:
la source
fatal: unknown field name: '-authordate:iso8601'
refs/heads
parrefs/remotes
pour voir les branches distantes.expansion of alias 'branches' failed; 'echo' is not a git command
(echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------') | grep --color -E "$(git rev-parse --abbrev-ref HEAD)$|$"
Depuis Git 2.19, vous pouvez simplement:
Vous pouvez également:
Ainsi, chaque fois que vous répertoriez des branches dans le référentiel actuel, elles seront répertoriées triées par date de validation.
Si chaque fois que vous listez des branches, vous voulez qu'elles soient triées par date de publication:
Avertissement: je suis l'auteur de cette fonctionnalité dans Git, et je l'ai implémentée lorsque j'ai vu cette question.
la source
Ajoute de la couleur (car
pretty-format
n'est pas disponible)la source
J'ai eu le même problème, alors j'ai écrit un bijou Ruby appelé Twig . Il répertorie les branches par ordre chronologique (le plus récent en premier) et peut également vous permettre de définir un âge maximum afin de ne pas répertorier toutes les branches (si vous en avez beaucoup). Par exemple:
Il vous permet également de stocker des propriétés personnalisées pour chaque branche, par exemple, l'ID de ticket, l'état, les tâches et de filtrer la liste des branches en fonction de ces propriétés. Plus d'informations: http://rondevera.github.io/twig/
la source
Je suis venu avec la commande suivante (pour Git 2.13 et versions ultérieures):
Si vous n'en avez pas,
column
vous pouvez remplacer la dernière ligne parLa sortie ressemble à
J'ai écrit un article de blog sur le fonctionnement des différentes pièces.
la source
git branch --sort
I mentionné dans stackoverflow.com/a/33163401/6309 .Pour votre information, si vous souhaitez obtenir une liste des récemment vérifiés des branches (par opposition récemment engagés) vous pouvez utiliser reflog de Git:
Voir aussi: Comment obtenir une liste des branches Git que j'ai récemment extraites?
la source
Voici un petit script que j'utilise pour basculer entre les branches récentes:
En utilisant ces deux alias:
Appelez simplement cela dans un référentiel Git, et il vous montrera les N dernières branches (10 par défaut) et un nombre de côté chacune. Entrez le numéro de la branche, et il vérifie:
la source
Normalement, nous considérons les branches éloignées récemment. Alors essayez ceci
la source
Voici un autre script qui fait ce que font tous les autres scripts. En fait, il fournit une fonction pour votre shell.
Sa contribution est qu'il tire certaines couleurs de votre configuration Git (ou utilise des valeurs par défaut).
la source
Ceci est basé sur la version de saeedgnu , mais avec la branche actuelle représentée avec une étoile et en couleur, et ne montrant que tout ce qui n'est pas décrit comme "mois" ou "années":
la source
Mon meilleur résultat en tant que script:
la source
git branch --sort=-committerdate | head -5
Pour tous ceux qui souhaitent obtenir uniquement les 5 premiers noms de branche triés en fonction de la date de validation.
la source
La réponse en ligne de commande acceptée est géniale, mais si vous voulez quelque chose de plus joli, comme une interface graphique, et votre origine === "github".
Vous pouvez cliquer sur "Branches" dans le référentiel. Ou appuyez directement sur l'URL: https://github.com/ORGANIZATION_NAME/REPO_NAME/branches
la source
Voici la variation que je cherchais:
Cela
tail -r
renverse la liste de sorte que le plus récentcommiterdate
est le dernier.la source
tail
a-r
?Je dirige la sortie de la réponse acceptée vers
dialog
, pour me donner une liste interactive:Enregistrer sous (par exemple)
~/bin/git_recent_branches.sh
etchmod +x
le. Ensuite,git config --global alias.rb '!git_recent_branches.sh'
pour me donner une nouvellegit rb
commande.la source
Je sais qu'il y a déjà beaucoup de réponses, mais voici mes deux cents pour un alias simple (j'aime avoir ma branche la plus récente en bas):
Cela vous donnera un bel aperçu de vos 15 dernières branches, en couleur, avec votre branche actuelle en surbrillance (et elle a un astérisque).
la source
J'ai eu du mal à gérer les guillemets simples sur Mac dans bash_profile lors de la tentative de définition d'un alias. Cette réponse a aidé à le résoudre " Comment échapper aux guillemets simples dans des chaînes entre guillemets simples
Solution de travail:
PS Impossible de commenter à cause de ma réputation
la source
git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
c'est ce dont tu as besoinla source
Git v2.19 introduit l'
branch.sort
option config (voir branch.sort ).Donc
git branch
, triera par date de validation (desc) par défaut avecscénario:
Mise à jour:
Donc,
et
la source