Je viens de Subversion et, quand j'avais une branche, je savais sur quoi je travaillais avec "Ces fichiers de travail pointent vers cette branche".
Mais avec Git, je ne suis pas sûr d’éditer un fichier dans NetBeans ou Notepad ++, qu’il soit lié au maître ou à une autre branche.
Il n'y a aucun problème avec git
dans bash, cela me dit ce que je fais.
git branch
devrait montrer toutes les branches locales de votre repo. La branche étoilée est votre branche actuelle.
Si vous voulez récupérer uniquement le nom de la branche sur laquelle vous vous trouvez, vous pouvez faire:
git branch | grep \* | cut -d ' ' -f2
Pour afficher la branche en cours sur laquelle vous vous trouvez, sans les autres branches répertoriées, vous pouvez procéder comme suit:
git rev-parse --abbrev-ref HEAD
Référence:
Vous avez également git symbolic-ref HEAD
qui affiche le refspec complet.
Pour afficher uniquement le nom de la branche dans Git v1.8 et ultérieur (merci à Greg de l'avoir signalé):
$ git symbolic-ref --short HEAD
Sur Git v1.7 +, vous pouvez aussi faire:
$ git rev-parse --abbrev-ref HEAD
Les deux doivent donner le même nom de branche si vous êtes sur une branche. Si vous êtes détaché, les réponses sont différentes.
Remarque:
Sur un client antérieur, cela semble fonctionner:
$ git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
- Darien 26. mars 2014
Pour ma propre référence (mais cela pourrait être utile à d'autres), j'ai présenté une vue d'ensemble de la plupart des techniques (en ligne de commande de base) mentionnées dans ce fil, chacune appliquée à plusieurs cas d'utilisation: HEAD
Résultats:
git branch | sed -n '/\* /s///p'
master
(detached from Origin/master)
(detached from Origin/feature-foo)
(detached from v1.2.3)
(detached from 285f294)
git status | head -1
# On branch master
# HEAD detached at Origin/master
# HEAD detached at Origin/feature-foo
# HEAD detached at v1.2.3
# HEAD detached at 285f294
# HEAD detached at 285f294
git describe --all
heads/master
heads/master
(remarque: pas remotes/Origin/master
)remotes/Origin/feature-foo
v1.2.3
remotes/Origin/HEAD
v1.0.6-5-g2393761
cat .git/HEAD
:ref: refs/heads/master
cat: .git/HEAD: Not a directory
git rev-parse --abbrev-ref HEAD
master
HEAD
git symbolic-ref --short HEAD
master
fatal: ref HEAD is not a symbolic ref
(Pour votre information, cela a été fait avec la version 1.8.3.1 de Git)
Une autre alternative:
git name-rev --name-only HEAD
Bien assez simple, je l'ai eu dans un one liner (bash)
git branch | sed -n '/\* /s///p'
(crédit: Expiation limitée)
Et pendant que je suis là, le seul support pour obtenir la branche de suivi à distance (le cas échéant)
git rev-parse --symbolic-full-name --abbrev-ref @{u}
Vous pouvez simplement taper en ligne de commande (console) sous Linux, dans le répertoire du référentiel:
$ git status
et vous verrez un texte, parmi lequel quelque chose de similaire à:
...
On branch master
...
ce qui signifie que vous êtes actuellement sur une branche master
. Si vous modifiez actuellement un fichier et qu'il se trouve dans le même référentiel local (répertoire local contenant les fichiers sous Git version control), vous modifiez un fichier dans cette branche.
git symbolic-ref -q --short HEAD
J'utilise ceci dans les scripts qui ont besoin du nom de la branche actuelle. Il vous montrera la courte référence symbolique actuelle à HEAD, qui sera le nom de votre branche actuelle.
git branch | grep -e "^*" | cut -d' ' -f 2
montrera seulement le nom de la branche
Trouvé une solution en ligne de commande de la même longueur que Oliver Refalo , en utilisant good ol 'awk:
git branch | awk '/^\*/{print $2}'
awk
lit cela comme "faire les choses dans {}
sur les lignes correspondant à la regex". Par défaut, les champs sont délimités par des espaces et vous imprimez le second. Si vous pouvez supposer que seule la ligne avec votre branche a le *, vous pouvez supprimer le ^. Ah, bash golf!
git branch
affiche uniquement le nom de la branche actuelle.
Bien que git branch vous montrera toutes les branches et mettra en surbrillance la dernière avec un astérisque, cela peut être trop fastidieux de travailler avec beaucoup de branches.
Pour afficher uniquement la branche sur laquelle vous vous trouvez, utilisez:
git rev-parse --abbrev-ref HEAD
#!/bin/bash
function git.branch {
br=`git branch | grep "*"`
echo ${br/* /}
}
git.branch
Pourquoi ne pas utiliser l'invite du shell git-aware, qui indiquerait le nom de la branche actuelle? git status
aide également.
Comment git-Prompt.sh from contrib/
le fait (git version 2.3.0), comme défini dans la fonction d'assistance __git_ps1
:
Premièrement, il y a un cas spécial si rebase en cours est détecté. Git utilise une branche non nommée (HEAD détachée) pendant le processus de rebase pour la rendre atomique, et la branche originale est sauvegardée ailleurs.
Si le fichier .git/HEAD
est un lien symbolique (un cas très rare, issu de l'histoire ancienne de Git), il utilise git symbolic-ref HEAD 2>/dev/null
Sinon, il lit le fichier .git/HEAD
. Les prochaines étapes dépendent de son contenu:
Si ce fichier n'existe pas, alors il n'y a pas de branche actuelle. Cela se produit généralement si le référentiel est nu.
S'il commence par le préfixe 'ref: '
, alors .git/HEAD
est symref (référence symbolique) et nous sommes sur une branche normale. Supprimez ce préfixe pour obtenir le nom complet, puis supprimez refs/heads/
pour obtenir le nom abrégé de la branche actuelle:
b="${head#ref: }"
# ...
b=${b##refs/heads/}
S'il ne commence pas par 'ref: '
, il est alors détaché HEAD (branche anonyme), ce qui pointe directement vers un commit. Utilisez git describe ...
pour écrire le commit actuel sous une forme lisible par l'homme.
J'espère que ça aide.
vous pouvez utiliser git bash sur le répertoire de travail commande est la suivante
git status -b
il vous indiquera sur quelle branche vous vous trouvez il y a beaucoup de commandes utiles, dont certaines sont
-s
--short Donne le résultat au format court.
-b--branchAfficher les informations de branche et de suivi, même au format court.
--porcelain [=] Donne le résultat dans un format facile à analyser pour les scripts. Ceci est similaire à la sortie courte, mais restera stable à travers les versions de Git et quelle que soit la configuration de l'utilisateur. Voir ci-dessous pour plus de détails.
Le paramètre version est utilisé pour spécifier la version du format. Ceci est facultatif et utilise par défaut le format de la version 1 d'origine.
--longue__. Donne le résultat au format long. C'est la valeur par défaut.
-v--verboseEn plus des noms de fichiers qui ont été modifiés, affichez également les modifications textuelles qui doivent être validées (c'est-à-dire, comme la sortie de git diff --cached). Si -v est spécifié deux fois, montrez également les modifications dans l’arborescence de travail qui n’ont pas encore été effectuées (c’est-à-dire comme la sortie de git diff).
Je recommande d'utiliser l'une de ces deux commandes.
git branch | grep -e "^*" | cut -d' ' -f 2
OR
git status | sed -n 1p | cut -d' ' -f 3
OU (plus commenté)
git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p
Avec le temps, nous pourrions avoir une très longue liste de branches.
Alors que certaines des autres solutions sont géniales, voici ce que je fais (simplifié à partir de la réponse de Jacob):
git branch | grep \*
À présent,
git status
fonctionne, mais seulement S'il y a des changements locaux
Désolé, ceci est une autre réponse en ligne de commande, mais c'est ce que je cherchais quand j'ai trouvé cette question et beaucoup de ces réponses ont été utiles. Ma solution est la fonction shell bash suivante:
get_branch () {
git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
git describe --exact-match HEAD 2> /dev/null || \
git rev-parse HEAD
}
Cela devrait toujours me donner quelque chose à la fois lisible par l'homme et directement utilisable comme argument pour git checkout
.
feature/HS-0001
v3.29.5
Une version moins bruyante pour le statut git ferait l'affaire
git status -bsuno
Il imprime
## branch-name
Dans Netbeans, assurez-vous que les annotations de gestion des versions sont activées (Affichage -> Afficher le gestion des versions Vous pouvez alors voir le nom de la branche en regard du nom du projet.
J'ai un script simple appelé git-cbr
( branche actuelle ) qui affiche le nom de la branche actuelle.
#!/bin/bash
git branch | grep -e "^*"
Je mets ce script dans un dossier personnalisé (~/.bin
). Le dossier est dans $PATH
.
Alors maintenant, quand je suis dans un dépôt Git, je tape simplement git cbr
pour imprimer le nom de la branche actuelle.
$ git cbr
* master
Cela fonctionne parce que la commande git
prend son premier argument et tente d'exécuter un script portant le nom de git-arg1
. Par exemple, git branch
tente d’exécuter un script appelé git-branch
, etc.
Et ça?
{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"
La commande Shell suivante vous indique la branche dans laquelle vous vous trouvez.
git branch | grep ^\*
Si vous ne voulez pas taper cette longue commande à chaque fois que vous voulez connaître la branche et que vous utilisez Bash, attribuez-lui un alias court, par exemple alias cb
, comme suit.
alias cb='git branch | grep ^\*'
Lorsque vous êtes dans la branche maîtresse et que votre invite est $
, vous obtenez * master
comme suit.
$ cb
* master
Vous pouvez configurer de manière permanente votre sortie bash pour qu'elle affiche le nom de votre branche git. C'est très pratique lorsque vous travaillez avec différentes branches, inutile de taper $ git status
tout le temps. Github repo git-aware-Prompt .
Ouvrez votre terminal (ctrl-alt-t) et entrez les commandes
mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-Prompt.git
Modifiez votre commande .bashrc avec Sudo nano ~/.bashrc
(pour Ubuntu) et ajoutez ce qui suit au sommet:
export GITAWAREPROMPT=~/.bash/git-aware-Prompt
source "${GITAWAREPROMPT}/main.sh"
Puis collez le code
export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "
à la fin du même fichier, vous avez précédemment collé le code d'installation. Cela vous donnera la sortie colorisée:
Si vous voulez vraiment que la dernière branche/balise soit extraite dans l’état détaché HEAD également.
git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev
Mise à jour C’est plus agréable si vous avez et n’avez pas peur de awk.
git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'
git status
donnera également le nom de la branche avec les modifications.
par exemple.
>git status
On branch master // <-- branch name here
.....
Retourne le nom de la branche ou SHA1 lorsque la tête est détachée:
git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD
Ceci est une version courte de la réponse de @ dmaestro12 et sans support de balises.
Je sais que c'est tard, mais sur linux/mac, depuis le terminal, vous pouvez utiliser ce qui suit.
git status | sed -n 1p
Explication:
git status -> obtient le statut de l'arbre de travail
sed -n 1p -> obtient la première ligne du corps de statut
La réponse à la commande ci-dessus se présentera comme suit:
"On branch your_branch_name"
Ajoutez-le à PS1
sous Mac:
PS1='\W@\u >`[ -d .git ] && git branch | grep ^*|cut -d" " -f2`> $ '
Avant d'exécuter la commande ci-dessus:
Après avoir exécuté cette commande:
Ne vous inquiétez pas, s'il ne s'agit pas d'un référentiel GIT, il n'y aura pas d'erreur en raison de [-d .git]
qui vérifie si le dossier .git
existe ou non.
vous pouvez également utiliser la variable GIT_BRANCH telle qu'elle apparaît ici: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
Le plugin git définit plusieurs variables d'environnement que vous pouvez utiliser dans vos scripts:
GIT_COMMIT - SHA du courant
GIT_BRANCH - Nom de la branche en cours d'utilisation, par exemple. "maître" ou "origine/foo"
GIT_PREVIOUS_COMMIT - SHA de la précédente validation construite de la même branche (l'actuel SHA dans la première branche de la branche)
GIT_URL - URL distante du référentiel
GIT_URL_N - URL distantes du référentiel lorsqu'il y a plus de 1 télécommandes, par exemple. GIT_URL_1, GIT_URL_2
GIT_AUTHOR_EMAIL - Email de l'auteur/de l'auteur
GIT_COMMITTER_EMAIL - Email de l'auteur/de l'auteur
À partir de la version 2.22 de git, vous pouvez simplement utiliser:
git branch --show-current
git branch | grep "*" | sed "s/* //" | awk '{printf $0}' | pbcopy
Pour copier directement le résultat dans le presse-papier. Merci à @ olivier-refalo pour le début…
Utiliser des idées antérieures; en supposant que sha1 est 40 caractères; et chasser les références (oui, devrait supprimer les lignes d’impression de débogage
git reflog | awk '
$3 == "checkout:" && (sha == "" || sha == $1 ) {
from=$(NF - 2)
to=$NF
print from, to, length(from) > "/dev/stderr"
if (length(from) != 40) { print from ; exit; }
sha=substr(from, 1, 7)
print sha > "/dev/stderr"
}
'
donne la sortie brute:
$ git status
HEAD detached at 147049c
[...]
$ ./gime-branch.sh
a47be8d2167641088b66bf8f5c2bf7d3da0c642c HEAD^ 40
a47be8d
master HEAD^ 6
master
Ajoutez simplement les lignes suivantes à votre ~/.bash_profile
:
branch_show() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(branch_show)\[\033[00m\] $ "
De cette façon, vous pouvez avoir le nom de la branche actuelle dans Terminal
Gracieuseté de Coderwall.com
Vous pouvez le faire avec une seule instruction grep, en utilisant le mode Perl et \K
pour réinitialiser le tampon de correspondance afin que vous n'obteniez que le nom de la branche.
$ git branch | grep -oP "^\*\s+\K\S+$"
master
Utilisez git branch --contains HEAD | tail -1 | xargs
, cela fonctionne également pour l'état "détaché HEAD".
Obtenir le nom de la succursale locale uniquement:
git status -b -u no | awk 'NR==1{print $3;}'
Obtenir le nom de la branche distante uniquement:
git status -b -u no | awk 'NR==2{print $6;}'
et git status -b -u no | awk 'NR==2{print $6;}' | tr -d "[.']"
pour supprimer les caractères spéciaux de la sortie
Je sais que la réponse à cette question a déjà été donnée, mais dans la version la plus récente de Git, la commande git branch
ouvre la liste de vos branches dans une sorte d’invite que vous devez quitter. Ce qui m'énerve sans fin!
Voici mon correctif: Ouvrez votre profil bash et tapez ceci dans:
#!/bin/bash
git() {
if [[ $@ == "branch" ]] then
command git branch -a | grep -v 'remotes'
else
command git "$@"
fi
}
Ouvrez maintenant Terminal et testez-le en tapant les commandes suivantes dans un dépôt Git:
source ~/.zshrc
git branch
Et le tour est joué! Une liste de vos succursales locales est imprimée dans votre terminal.
Le code que vous écrivez dans votre fichier bashrc écrase la fonction par défaut pour git branch
et la remplace par une commande beaucoup plus longue qui répertorie toutes les branches locales via l'argument -a
. Ensuite, nous grep
pour extraire l’activité supplémentaire non nécessaire et l’imprimer. Si vous excluez la commande grep
, vous obtiendrez toujours l’invite ennuyeuse. Si vous n'êtes pas familier avec l'écriture de commandes bash, vérifiez cette explication: À propos de .bash_profile, .bashrc et où un alias devrait-il être écrit?