Il n'y a pas d'information fixe qui enregistrerait une telle données, car SHA1 ne sont pas associés à tout moment avec un chemin réf.
Les branches peuvent se déplace, renommer ou supprimer, alors que le SHA1 sera toujours stocké (sauf si elle est référencé par aucun motif ref, il finira par être élaguée)
Cela dit:
git show-ref |grep yourSHA1|awk "{print $2}"
git show-ref --heads --tags -d |grep yourSHA1|awk "{print $2}"
est assez proche de ce que veulent yout:
C:\Prog\Git\tests\rep\main5>git show-ref | grep f4a071 | awk "{print $2}"
refs/heads/master
refs/remotes/origin/HEAD
refs/remotes/origin/master
beaucoup d'options sont disponibles pour git show-ref
et vous permettra de:
- écran aussi déréférencé SHA1
- affichage SHA1 seulement pour un motif de refs
L'OP ajoute:
il retournera rien du tout si un SHA passé ne le fait pas référence une tête ou tout autre commit déréférencable?
Avez-vous une idée de la façon dont nous pourrions faire l'étape intermédiaire de déterminer le SHA du commit le plus récent appartenant à la même branche que le SHA passé?
Une autre commande de plomberie qui peut aider serait git name-rev
:
C:\Prog\Git\tests\rep\main5>git name-rev a7768453
a7768453 patches~1
C:\Prog\Git\tests\rep\main5>git name-rev a7768453|gawk "{gsub(/~.*/,\"\",$2);print $2}
patches
Comme Jefromi mentions dans les commentaires, une commande de porcelaine serait git branch --contain
:
C:\Prog\Git\tests\rep\main5>git branch --contain 1e73e369
master
* patches
tmp
--contains <commit>
Ne lister que les branches qui contiennent le s commit spécifié.
Il est utilisé pour trouver toutes les branches qui nécessiteront une attention particulière si <commit>
devait être rebasée ou modifiée, puisque ces branches contiennent le <commit>
spécifié.
Merci beaucoup et vous avez raison en est proche d'au moins 9 fois sur 10. Seul problème gauche: il retournera rien du tout si un SHA passé ne fait pas référence à une tête ou tout autre dereferencable commettre ? Avez-vous une idée de comment nous pourrions faire l'étape intermédiaire de déterminer la SHA de la dernière engager appartenant à la même branche que le CSA a adopté (par exemple, si on passe SHA pour engager 32 nous obtenons le CSA retour pour engager 0 (aka HEAD))? – andreb
@andreb: bon point. 'show-ref' est seulement pour les références SHA1 directement par les refs. 'name-rev' peut aider à attraper le reste. Voir ma réponse mise à jour. – VonC
@andreb: Voir aussi http://stackoverflow.com/questions/917102/in-git-is-there-a-way-to-get-the-friendly-name-for-an-arbitrary-commit pour plus – VonC