Afficher uniquement la branche actuelle dans Git

356

J'ai essayé de chercher une commande Git spéciale pour cela, mais je n'en ai pas trouvé. Y a-t-il quelque chose de plus court ou plus rapide que ce qui suit?

git branch | awk '/\*/ { print $2; }'
Ollie Saunders
la source
1
je pense que c'est le moyen le plus rapide possible pour obtenir la branche actuelle
Eimantas
@ChandrayyaGK: Non, parce que l'autre question porte sur le faire à partir de votre IDE. (La plupart des réponses sont destinées à l'utilisation de la ligne de commande, donc cela vaut le coup d'oeil, mais ce n'est pas un doublon approprié, et ces réponses devraient peut-être être migrées ici à la place, s'il y en a qui ajoutent une valeur significative à ce qui est déjà ici.)
tripleee
3
@Torek - voici une autre tâche simple rendue difficile par Git.
2016
La meilleure réponse au lien publié par @ChandrayyaGK est beaucoup plus lente que cela!
Colm Bhandal

Réponses:

660
$ git rev-parse --abbrev-ref HEAD
master

Cela devrait fonctionner avec Git 1.6.3 ou plus récent.

comte
la source
Ne fonctionne pas non plus pour moi, avec git-1.6.2.5. git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (ie rev-parse n'accepte pas --abbrev-ref (pas dans la page de manuel non plus))
JasonWoof
1
JasonWoof, travaille pour moi en 1.6.4.2, besoin de changelog pour voir quand exactement cela s'est produit ;-)
Michael Krelin - hacker
7
Pour autant que je sache à partir des journaux Git, cette fonctionnalité a été fusionnée le 20/04/2009 et a été publiée avec la version 1.6.3.
Earl
1
J'aimerais vraiment comprendre cela aussi. Comment cela fonctionne-t-il réellement? De plus, il semble que --abbrev-ref ne renvoie rien pour aucun autre argument. Il ne peut pas simplement avoir HEAD comme argument.
Setafire
6
Notez que si vous êtes dans une référence symbolique détachée (cela peut signifier que vous êtes dans une branche, mais que vous avez vérifié la validation précédente), cette commande ne reviendra que, ce qui n'est HEADpas prévumaster
unifreak
129

Dans Git 1.8.1, vous pouvez utiliser la commande git symbolic-ref avec l'option "--short":

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop
dieresys
la source
Merci. Alias ​​créé.
Michael Burr
7
Mieux que la réponse acceptée IMO, car cela fonctionne sur des repos sans commits
Jerome Dalbert
2
Obtenir l'erreur fatal: ref HEAD is not a symbolic reflors de l'exécution de cela dans le cadre d'une version TravisCI
kmanzana
ne semblait pas fonctionner dans GIT 1.9.1 `` `` git version 1.9.1 fatal: ref HEAD n'est pas une ref symbolique ''
Richard
Fonctionne pour moi: git version 2.16.2.windows.1
Tagc
59

, Vous aurez une approche plus simple avec Git 2,22 (Q2 2019): git branch --show-current.

Voir commit 0ecb1fc (25 octobre 2018) par Daniels Umanovskis ( umanovskis) .
(Fusionné par Junio ​​C Hamano - gitster- dans commit 3710f60 , 07 mars 2019)

branch: introduire l' --show-currentoption d'affichage

Lorsqu'il est appelé avec --show-current, git branchimprime le nom de la branche actuelle et se termine.
Seul le nom réel est imprimé, sans refs/heads.
Dans l'état HEAD détaché, rien n'est sorti.

Destiné à la fois à des scripts et à une utilisation interactive / informative.
Contrairement à git branch --list, aucun filtrage n'est nécessaire pour obtenir simplement le nom de la branche.

VonC
la source
15
Enfin, ce qui semble avoir dû être là depuis le début, a été ajouté!
dtasev
27

Vous pouvez être intéressé par la sortie de

git symbolic-ref HEAD

En particulier, en fonction de vos besoins et de la disposition que vous souhaitez faire

basename $(git symbolic-ref HEAD)

ou

git symbolic-ref HEAD | cut -d/ -f3-

et là encore il y a le .git/HEADdossier qui peut aussi vous intéresser.

Michael Krelin - pirate
la source
2
Vous pouvez raccourcir git rev-parse --symbolic-full-nameà git symbolic-ref.
Earl
1
Vous n'avez pas besoin d'utiliser basenameou cut; utiliser BR=${BR#refs/heads/}(où BR est le nom de la variable dont vous avez enregistré la sortie git symbolic-ref HEAD).
Jakub Narębski
Jakub, bien sûr que non, à condition d'avoir la sortie en variable.
Michael Krelin - hacker le
5
peut git symbolic-ref --short HEADaussi faire
Fahad Siddiqui
2
Cela se cassera si vous avez des barres obliques dans les noms de vos branches ("task / foo", "feature / bar"). Un tas de mes scripts de construction ont commencé à échouer lorsque des collègues ont décidé que les barres obliques étaient cool ...
vacri
13

D'après ce que je peux dire, il n'y a aucun moyen de montrer nativement juste la branche actuelle dans Git, donc j'ai utilisé:

git branch | grep '*'
theruss
la source
3
Bien que cela fonctionne avec GNU coreutils, grep '*'c'est nominalement une erreur de syntaxe. Vous voulez probablement de git branch | sed -n 's/^\* //p'toute façon. Ou en fait, ce que le PO a affiché en premier lieu, ce qui revient au même.
tripleee
@tripleee pouvez-vous m'éclairer sur la raison pour laquelle il grep '*'s'agit nominalement d'une erreur de syntaxe?
JK ABC
1
@JKABC: ce que @tripleee voulait dire, c'est '*'une expression régulière et en tant que telle, elle n'est pas valide. Vous voulez probablement utiliser '[*]'(c'est-à-dire, un caractère *au lieu de l'opérateur "zéro ou plusieurs fois").
johndodo
2
@johndodo merci pour la clarification, cela a du sens pour moi maintenant. Je le fais habituellement pargrep '\*'
JK ABC
2
peut seulement couper le nom de la branche avecgit branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui
7

Je suppose que cela devrait être rapide et peut être utilisé avec une API Python:

git branch --contains HEAD
* master
urvish
la source
4
Cela ne produit pas la branche actuelle. Il affiche la liste des branches qui pointent vers les points HEAD de validation. Et oui, il peut se chevaucher, mais cela pourrait conduire à des malentendus. Créez une nouvelle branche d'où vous êtes et réessayez votre ligne: deux branches. La question demande " juste la branche actuelle ".
RomainValeri
4

j'utilise

/etc/bash_completion.d/git

Il est venu avec Git et fournit une invite avec le nom de la branche et la complétion des arguments.

iny
la source
Comment activer cette invite?
Alex
Dans ubuntu, $ source /etc//bash_completion.d/git-prompt File peut être nommé différemment sur différents systèmes. (Remarque: le sourcemot-clé est le même que juste .(point) dans bash.)
Michael
1

Ce n'est pas plus court, mais cela concerne également les branches détachées:

git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'
arn0n
la source
1

Pour être complet, echo $(__git_ps1)sur Linux au moins, devrait vous donner le nom de la branche actuelle entourée de parenthèses.

Cela peut être utile dans certains scénarios car il ne s'agit pas d'une commande Git (tout en dépendant de Git), notamment pour configurer votre invite de commande Bash pour afficher la branche actuelle .

Par exemple:

/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)

/mnt/c/git>
tymtam
la source
l'élément est un alias et doit être présent pour les scripts shell interactifs. son probablement absent pour toute sorte de scripts.
Alexander Stohr
0

Quelqu'un pourrait trouver cela ( ) utile. La branche actuelle est indiquée par une marque *.git show-branch --current

host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
 * [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+  [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+  [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+  [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
Antagoniste de Kaliyug
la source