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 sais pas quand je modifie un fichier dans NetBeans ou Notepad ++, qu'il soit lié au maître ou à une autre branche.
Il n'y a pas de problème avec git
bash, ça me dit ce que je fais.
git
branch
git-branch
mike628
la source
la source
.git/HEAD
, éventuellement dans un répertoire parentgit branch --show-current
. Voir ma réponse ici .Réponses:
devrait montrer toutes les branches locales de votre repo. La branche suivie est votre branche actuelle.
Si vous souhaitez récupérer uniquement le nom de la branche sur laquelle vous vous trouvez, vous pouvez faire:
la source
git checkout --orphan foo
puisgit branch
n'a pas montré de branchefoo
. Alors quegit symbolic-ref HEAD
comme suggéré, une autre réponse a fonctionné.Pour afficher la branche actuelle sur laquelle vous vous trouvez, sans les autres branches répertoriées, vous pouvez effectuer les opérations suivantes:
Référence:
la source
git branch
spectacles* (no branch)
, ce qui est également inutile ...git rev-parse --abbrev-ref HEAD 2>/dev/null
La partie / dev / null vous empêche de voir une erreur si vous venez de créer un nouveau référentiel qui n'a pas encore HEAD.Vous avez également
git symbolic-ref HEAD
qui affiche la spécification complète.Pour afficher uniquement le nom de la branche dans Git v1.8 et versions ultérieures (merci à Greg de l'avoir signalé):
Sur Git v1.7 +, vous pouvez également faire:
Les deux doivent donner le même nom de branche si vous êtes sur une branche. Si vous êtes sur une tête détachée, les réponses diffèrent.
la source
git rev-parse --abbrev-ref HEAD
montreHEAD
quand vous êtes sur une tête détachée.git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
car il affichera une chaîne commeHEAD detached at a63917f
dans un état détaché, contrairement aux autres réponses qui ne montrent rien ou HEAD. C'est important.Pour ma propre référence (mais cela pourrait être utile à d'autres), j'ai fait un aperçu de la plupart des techniques (de ligne de commande de base) mentionnées dans ce fil, chacune appliquée à plusieurs cas d'utilisation: HEAD est (pointant vers):
Résultats:
git branch | sed -n '/\* /s///p'
master
(detached from origin/master)
(detached from origin/feature-foo)
(detached from v1.2.3)
(HEAD detached at 285f294)
(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: nonremotes/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 info, cela a été fait avec la version 1.8.3.1 de git)
la source
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
c'était la meilleure solution pour moi (bons noms pour les balises et les têtes de branche, pas de sortie pour les têtes détachées aléatoires.git describe
a un sérieux échec lorsqu'il y a plusieurs branches référençant le même commit, par exemple juste aprèsgit checkout -b foo
- il en utilise une arbitrairement (semble être la plus récente). Je vais changer ma stratégie pour utiliser une sortie filtréegit branch
et ne l'utiliser quegit describe
si le résultat concerne une tête détachée.git branch --no-color
pour m'assurer que le nom de fichier est exempt de codes d'échappement terminaux ennuyeux.Depuis la version 2.22 de git, vous pouvez simplement utiliser:
Selon la page de manuel:
la source
Encore une alternative:
la source
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
Cela ne fonctionne pas comme prévugit branch --list
dit simplement* (HEAD detached at 7127db5)
. Fairegit rev-parse --abbrev-ref HEAD
dit simplementHEAD
et ainsi de suite.Eh bien assez simple, je l'ai eu dans une doublure (bash)
(crédit: Expiation limitée)
Et pendant que je suis là, le seul revêtement pour obtenir la branche de suivi à distance (le cas échéant)
la source
sed -n 's/\* //p'
fait l'affaire. Bien que je tende vers le paranoïaque, je vais donc l'ancrersed -n 's/^\* //p'
.Vous pouvez simplement taper en ligne de commande (console) sous Linux, dans le répertoire du référentiel:
et vous verrez du texte, parmi lesquels quelque chose de similaire à:
ce qui signifie que vous êtes actuellement en
master
succursale. Si vous modifiez un fichier à ce moment et qu'il se trouve dans le même référentiel local (répertoire local contenant les fichiers qui sont sous la gestion du contrôle de version Git), vous modifiez le fichier dans cette branche.la source
git status
et obtenir uniquement la première ligne de sortiegit status | head -1
qui donne quelque chose comme# On branch master
. Je suis sûr que les différences de version devront également être prises en compte.git status | grep 'On branch'
, ce qui devrait avoir le même effet (devrait, ne signifie pas que ce sera le cas si votre version de Git l'affiche différemment). Ougit branch | grep '*'
, qui affichera le nom de la branche avec une étoile au début.<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
le retour d'une valeur peut prendre un certain temps si de nombreux fichiers sont gérés.git status
peut débiter le temps de génération de la page entière.J'utilise ceci dans des scripts qui ont besoin du nom de branche actuel. Il vous montrera la courte référence symbolique actuelle à HEAD, qui sera le nom de votre branche actuelle.
la source
n'affichera que le nom de la branche
la source
git branch
affiche uniquement le nom de la branche actuelle.Alors que git branch vous montrera toutes les branches et mettra en surbrillance la branche actuelle avec un astérisque, cela peut être trop lourd lorsque vous travaillez avec beaucoup de branches.
Pour afficher uniquement la branche sur laquelle vous vous trouvez actuellement, utilisez:
la source
git branch --contains
répertorie parfois plus d'une branche.Trouvé une solution en ligne de commande de la même longueur que celle d' Oliver Refalo , en utilisant un bon vieux awk:
awk
lit cela comme "faire le truc{}
sur des lignes correspondant à l'expression régulière". Par défaut, il suppose des champs séparés par des espaces, vous imprimez donc le second. Si vous pouvez supposer que seule la ligne avec votre branche a le *, vous pouvez supprimer le ^. Ah, bash golf!la source
la source
Pourquoi ne pas utiliser l'invite du shell git-aware, qui vous indiquerait le nom de la branche actuelle?
git status
aide également.Comment git-prompt.sh de
contrib/
fait il (version git 2.3.0), tel que défini dans la__git_ps1
fonction d'aide:Tout d'abord, il existe un cas particulier si un rebase en cours est détecté. Git utilise une branche sans nom (HEAD détaché) pendant le processus de rebase pour la rendre atomique, et la branche d'origine est enregistrée ailleurs.
Si le
.git/HEAD
fichier est un lien symbolique (un cas très rare, de l'histoire ancienne de Git), il utilisegit symbolic-ref HEAD 2>/dev/null
Sinon, il lit le
.git/HEAD
fichier. Les prochaines étapes dépendent de son contenu:Si ce fichier n'existe pas, il n'y a pas de branche courante. Cela se produit généralement si le référentiel est vide.
Si elle commence par le
'ref: '
préfixe, 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 et supprimezrefs/heads/
pour obtenir le nom court de la branche actuelle:S'il ne démarre pas
'ref: '
, il est détaché HEAD (branche anonyme), pointant directement vers une validation. Permetgit describe ...
d'écrire le commit actuel sous une forme lisible par l'homme.J'espère que ça aide.
la source
git describe --contains --all HEAD
que je ne vois pas actuellement ailleurs sur cette page. Comme je suis sûr que vous le savez, les réponses de lien uniquement ne sont pas recommandées sur StackOverflow.git-prompt.sh
(aka__git_ps1
) le fait ...Une version moins bruyante pour le statut git ferait l'affaire
Il imprime
la source
Désolé, c'est une autre réponse en ligne de commande, mais c'est ce que je cherchais lorsque j'ai trouvé cette question et bon nombre de ces réponses étaient utiles. Ma solution est la fonction shell bash suivante:
Cela devrait toujours me donner quelque chose à la fois lisible par l'homme et directement utilisable comme argument
git checkout
.feature/HS-0001
v3.29.5
la source
git checkout
.vous pouvez utiliser git bash sur la commande de répertoire de travail comme suit
il vous dira sur quelle branche vous vous trouvez il y a beaucoup de commandes qui sont utiles dont certaines sont
--short Donne la sortie au format court.
-b --branch Affiche la branche et les informations de suivi même en format court.
--porcelain [=] Donnez la sortie dans un format facile à analyser pour les scripts. Ceci est similaire à la sortie courte, mais restera stable dans toutes les versions de Git et quelle que soit la configuration 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 revient par défaut au format original de la version v1.
--long Donne la sortie au format long. C'est la valeur par défaut.
-v --verbose En plus des noms des 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, affichez également les modifications dans l'arborescence de travail qui n'ont pas encore été mises en scène (c'est-à-dire, comme la sortie de git diff).
la source
donnera également le nom de la branche avec les modifications.
par exemple
la source
Au fil du temps, nous pourrions avoir une très longue liste de succursales.
Bien que certaines des autres solutions soient excellentes, voici ce que je fais (simplifié à partir de la réponse de Jacob):
Maintenant,
fonctionne, mais seulement s'il y a des changements locaux
la source
Je recommande d'utiliser l'une de ces deux commandes.
git branch | grep -e "^*" | cut -d' ' -f 2
OU
git status | sed -n 1p | cut -d' ' -f 3
OU (plus verbeux)
git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p
la source
Dans Netbeans, assurez-vous que les annotations de version sont activées (Affichage -> Afficher les étiquettes de version). Vous pouvez alors voir le nom de la branche à côté du nom du projet.
http://netbeans.org/bugzilla/show_bug.cgi?id=213582
la source
Et ça?
la source
symbolic-ref
pièce ne doit-elle pas également--short
éviter de préfixer le nom de la branche avecrefs/heads/
?J'ai un script simple appelé
git-cbr
( branche actuelle ) qui imprime le nom de la branche actuelle.J'ai mis 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.Cela fonctionne car la
git
commande prend son premier argument et essaie d'exécuter un script qui porte le nom degit-arg1
. Par exemple,git branch
essaie d'exécuter un script appelégit-branch
, etc.la source
Vous pouvez configurer de manière permanente votre sortie bash pour afficher votre nom de branche git. C'est très pratique lorsque vous travaillez avec différentes branches, pas besoin de taper
$ git status
tout le temps. Github repo git-aware-prompt .Ouvrez votre terminal (ctrl-alt-t) et entrez les commandes
Modifiez votre .bashrc avec la
sudo nano ~/.bashrc
commande (pour Ubuntu) et ajoutez ce qui suit en haut:Collez ensuite le code
à la fin du même fichier dans lequel vous avez collé le code d'installation plus tôt. Cela vous donnera la sortie colorisée:
la source
La commande shell suivante vous indique la branche dans laquelle vous vous trouvez actuellement.
Lorsque vous ne voulez pas taper cette longue commande chaque fois que vous voulez connaître la branche et que vous utilisez Bash, donnez à la commande un alias court, par exemple un alias
cb
, comme ceci.Lorsque vous êtes dans le maître de branche et que vous y êtes invité
$
, vous obtenez ce* master
qui suit.la source
git branch | grep '^\*'
Renvoie le nom de la branche ou SHA1 en cas de tête détachée:
Il s'agit d'une version courte de la réponse de @ dmaestro12 et sans prise en charge des balises.
la source
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
Si vous voulez vraiment que la dernière branche / étiquette soit extraite dans l'état HEAD détaché également.
Mettre à jour C'est plus agréable si vous avez et n'avez pas peur de awk.
la source
rev | cut -d' ' -f1| rev
peut être simplifié avecawk '{print $NF}'
checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9
c'est toujours une astuce utile qui pourrait aider à lever l'ambiguïté dans certains cas.git reflog | awk '$3=="checkout:" {print $NF; exit}'
Je sais que c'est en retard mais sur un linux / mac, à partir du terminal, vous pouvez utiliser ce qui suit.
Explication:
git status -> obtient le statut de l'arbre de travail
sed -n 1p -> obtient la première ligne du corps du statut
La réponse à la commande ci-dessus se présente comme suit:
la source
head -1
serait la façon habituellevous pouvez également utiliser la variable GIT_BRANCH comme indiqué 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 actuellement utilisée, par exemple "master" ou "origin / foo"
GIT_PREVIOUS_COMMIT - SHA de la validation construite précédente de la même branche (la SHA actuelle lors de la première construction dans 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 - Courriel du contributeur / auteur
GIT_COMMITTER_EMAIL - Courriel du contributeur / auteur
la source
Ajoutez-le à l'
PS1
aide de Mac: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'affichera pas d'erreur en raison de
[-d .git]
laquelle vérifie si le.git
dossier existe ou non.la source