2017-05-15 2 views
3

Dans mon référentiel local, il y a parfois des balises qui marquent un commit sans enfant et pas de nom de branche.Comment afficher tous les commits étiquetés inaccessibles par une succursale?

A l'origine, je les ai créés en dérivant ma ligne de développement principale normalement, en définissant une balise, puis en supprimant la branche. Ils ne sont pas récupérés parce que le tag maintient la ligne ouverte.

Y a-t-il une commande qui va identifier tous ces commits? Ce n'est pas grave si cette commande trouve aussi les têtes de branches car je peux les identifier facilement avec git show-ref --heads. Je voudrais les nettoyer (soit enlever les étiquettes et GC de la ligne dont je n'ai plus besoin, soit définir une branche là où je pense que c'est une meilleure pratique).

+1

Il est pas vraiment clair pour moi ce que vous cherchez. 'git tag' listera tous vos tags, et' git for-each-ref' vous permet d'écrire des scripts qui regardent * all * références (branches, tags, notes, 'refs/stash', peu importe). Vous pouvez alors écrire du code/un script qui trouve des commits localisés par une référence qui n'est pas une branche, qui n'est pas accessible depuis n'importe quelle référence qui est * une * branche, si c'est ce que votre objectif est. – torek

Répondre

3

Utilisez git tag pour lister tous les tags. Testez si elles sont accessibles depuis une ou plusieurs branches.

Quelque chose comme:

git tag | while read tag 
do 
    echo Tag is $tag 
    git branch -a --contains $tag 
    echo "" 
done