Comment trouver l'actuelle branche git dans décollement de la TÊTE de l'état
Je peux trouver l'actuelle branche git nom de l'une de ces:
git branch | awk '/^\*/{ print $2 }'
git describe --contains --all HEAD
Mais quand dans un détaché à la TÊTE de l'état, comme dans le post de la phase de construction dans un Jenkins maven build (ou dans un Travis git fetch), ces commandes ne fonctionne pas.
Mon travail actuel de la solution est: est-ce
git show-ref | grep $(git show-ref -s -- HEAD) | sed 's|.*/\(.*\)||' | grep -v HEAD | sort | uniq
Il affiche le nom de la branche qui a le dernier commit sur son extrémité de la TÊTE. Cela fonctionne bien, mais j'ai l'impression que quelqu'un avec plus de git-fu pourrait avoir un plus joli solution?
- “actuelle de la branche git [...] dans décollement de la TÊTE” – Détaché de la TÊTE signifie qu'il n'y a pas de branche courante, de sorte que la branche êtes-vous essayer de trouver des?
- L'OP est l'exemple le rend assez clair de ce qu'il cherche.
- Je sais, mais c'est pas une bonne idée de demander quelque chose et définir une solution de travail. Pas tout le monde est capable de lire que de voir ce genre de résultat vient de sortir..
- Je ne suis pas juste de demander une solution de travail, je vous demande le moyen le plus simple (ou "git façon"?) de trouver la correspondance nom de la branche(s).
Vous devez vous connecter pour publier un commentaire.
Plus de porcelaine façon:
Les arbitres seront inscrites dans le format
(HEAD, master)
- vous aurez à analyser un petit peu si vous avez l'intention de l'utiliser dans des scripts plutôt que pour la consommation humaine.Vous pourriez également mettre en œuvre vous-même un peu plus proprement:
avec l'avantage de recevoir le candidat refs sur des lignes séparées, avec aucun caractère supplémentaire.
--pretty=%D
pour obtenirHEAD, branchname
sans les environs parens. Testé sur git v2.11.0git show -s --pretty=%D HEAD | tr -s ', ' '\n' | grep -v HEAD | head -n1
git show -s --pretty=%D HEAD | tr -s ',' '\n' | sed 's/^ //' | grep -v -e HEAD -e '^origin/' | head -n1
ne fonctionne que si détachée, malheureusement.J'avais besoin d'une solution légèrement différente pour Jenkins, car il n'a pas les copies locales des branches. Donc le courant de commettre doivent être en correspondance avec les branches distantes:
ou sans réseau:
Il est également intéressant de noter que cela peut renvoyer plusieurs noms de branche lorsque vous avez plusieurs chefs de direction à la même livraison.
Mise à JOUR:
Je viens de remarquer que Jenkins jeux de
GIT_BRANCH
variable d'environnement qui contient une valeur commeorigin/master
. Ceci peut être utilisé pour obtenir branche git dans Jenksin trop:Évidemment de les jeter (pas de succursales). Bien sûr, vous pouvez obtenir un nombre arbitraire de branches qui pourraient décrire l'actuel CHEF (y compris bien sûr, aucune fonction de comment vous vous êtes retrouvé sur pas-branche) qui pourrait avoir pour être rapide avant de les fusionner dans la branche locale (l'une des nombreuses raisons pourquoi vous devriez toujours utiliser
git merge --no-ff
).git checkout @{0}
git symbolic-ref HEAD
retournerefs/heads/branchname
si vous êtes sur une branche, et des erreurs si vous ne l'êtes pas.Voici
git nthlastcheckout
, il obtient la chaîne exacte vous avez utilisé pour votre nième dernière vérification de la reflog:Exemples: