Mostra solo l'attuale ramo in Git


356

Ho provato a cercare uno speciale comando Git per questo, ma non sono riuscito a trovarne uno. C'è qualcosa di più corto o più veloce del seguente?

git branch | awk '/\*/ { print $2; }'

1
penso che questo sia il modo più veloce possibile per ottenere l'attuale ramo
Eimantas,


@ChandrayyaGK: No, perché l'altra domanda riguarda il farlo dall'interno del tuo IDE. (Molte delle risposte sono per l'uso da riga di comando, quindi vale la pena dare un'occhiata, ma non è un duplicato appropriato, e quelle risposte dovrebbero forse essere migrate qui, se ce ne sono alcune che aggiungono un valore significativo a ciò che è già qui.)
Tripleee

3
@Torek - ecco un'altra semplice operazione resa difficile da Git.
jww

La risposta migliore al link pubblicato da @ChandrayyaGK è molto più lenta di questa!
Colm Bhandal,

Risposte:


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

Questo dovrebbe funzionare con Git 1.6.3 o versioni successive.


Neanche per me funziona, con git-1.6.2.5. git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (ovvero rev-parse non accetta --abbrev-ref (non presente neanche nella pagina man))
JasonWoof

1
JasonWoof, funziona per me in 1.6.4.2, è necessario modificarlo per vedere quando è successo esattamente ;-)
Michael Krelin - hacker,

7
Per quanto ne so dai registri di Git, questa funzione è stata unita nel 20-04-2009 ed è stata rilasciata con la versione 1.6.3.
conte

1
Mi piacerebbe davvero capire anche quello. Come funziona davvero? Inoltre, sembra che --abbrev-ref non restituisca nulla per nessun altro argomento. Non può semplicemente avere HEAD come argomento.
Setafire,

6
Nota che se ti trovi in ​​un riferimento simbolico distaccato (potrebbe significare che sei in un ramo, ma hai verificato il commit precedente), questo comando restituirà solo HEAD, non previstomaster
unifreak

129

In Git 1.8.1 puoi usare il comando git symbolic-ref con l'opzione "--short":

$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop

Grazie. Alias ​​creato.
Michael Burr,

7
Meglio della risposta accettata IMO, perché funziona su repository senza commit
Jerome Dalbert

2
Ottenere l'errore fatal: ref HEAD is not a symbolic refquando si esegue questo come parte di una build
TravisCI

non sembrava funzionare in GIT 1.9.1 `` `git versione 1.9.1 fatale: ref HEAD non è un riferimento simbolico ''
Richard,

Funziona per me: git versione 2.16.2.windows.1
Tagc

59

Con Git 2.22 (Q2 2019), si avrà un approccio più semplice: git branch --show-current.

Vedi commit 0ecb1fc (25 ott 2018) di Daniels Umanovskis ( umanovskis) .
(Unita da Junio ​​C Hamano - gitster- in commit 3710f60 , 07 mar 2019)

branch: introduce l' --show-currentopzione di visualizzazione

Se chiamato con --show-current, git branchstamperà il nome del ramo corrente e terminerà.
Viene stampato solo il nome effettivo, senza refs/heads.
In stato HEAD distaccato, non viene emesso nulla.

Destinato sia allo scripting che all'uso interattivo / informativo.
Diversamente git branch --list, non è necessario alcun filtro per ottenere solo il nome del ramo.


15
Infine, è stato aggiunto quello che sembra avrebbe dovuto essere lì fin dall'inizio!
dtasev il

27

Potresti essere interessato all'output di

git symbolic-ref HEAD

In particolare, a seconda delle esigenze e del layout che potresti voler fare

basename $(git symbolic-ref HEAD)

o

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

e poi di nuovo c'è il .git/HEADfile che potrebbe anche interessarti.


2
È possibile ridurre git rev-parse --symbolic-full-namea git symbolic-ref.
conte

1
Non è necessario utilizzare basenameo cut; use BR=${BR#refs/heads/}(dove BR è il nome della variabile di cui hai salvato l'output git symbolic-ref HEAD).
Jakub Narębski,

Jakub, ovviamente no, a condizione che tu abbia l'output in variabile.
Michael Krelin - hacker,

5
può fare git symbolic-ref --short HEADanche
Fahad Siddiqui

2
Questo si interromperà se ci sono barre nei nomi dei rami ("task / foo", "feature / bar"). Un certo numero dei miei buildscripts ha iniziato a fallire quando i colleghi hanno deciso che le barre erano belle ...
vacri

13

Da quello che posso dire, non c'è modo di mostrare nativamente solo l'attuale ramo in Git, quindi ho usato:

git branch | grep '*'

3
Sebbene funzioni con i coreutils GNU, grep '*'è nominalmente un errore di sintassi. Probabilmente vuoi git branch | sed -n 's/^\* //p'comunque. O in realtà, ciò che l'OP ha pubblicato in primo luogo, il che equivale alla stessa cosa.
Tripleee

@tripleee mi puoi chiarire perché grep '*'è nominalmente un errore di sintassi?
JK ABC

1
@JKABC: il significato di @tripleee è che '*'è un'espressione regolare e come tale non è valida. Probabilmente si desidera utilizzare '[*]'(ovvero, carattere *anziché operatore "zero o più volte").
johndodo

2
@johndodo grazie per il chiarimento, ha senso per me adesso. Di solito lo faccio dagrep '\*'
JK ABC

2
posso solo tagliare il nome del ramo congit branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui,

7

Immagino che questo dovrebbe essere veloce e può essere utilizzato con un'API Python:

git branch --contains HEAD
* master

4
Ciò non genera il ramo corrente. Emette l'elenco delle diramazioni che capita di puntare ai punti di commit HEAD. E sì, può sovrapporsi, ma ciò potrebbe portare a malintesi. Crea un nuovo ramo da dove ti trovi e riprova la tua linea: due rami. La domanda chiede " solo l'attuale ramo ".
Romain Valeri

4

sto usando

/etc/bash_completion.d/git

È arrivato con Git e fornisce un prompt con il nome del ramo e il completamento dell'argomento.


Come può essere attivato questo prompt?
Alex,

In Ubuntu, $ source /etc//bash_completion.d/git-prompt File può essere nominato in modo diverso su sistemi diversi. (Nota: la sourceparola chiave è la stessa di solo .(punto) in bash.)
michael

1

Questo non è più breve, ma si occupa anche di rami distaccati:

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

1

Per completezza, echo $(__git_ps1)almeno su Linux, dovrebbe darti il ​​nome dell'attuale ramo racchiuso tra parentesi.

Questo può essere utile in alcuni scenari in quanto non è un comando Git (mentre dipende da Git), in particolare per impostare il prompt dei comandi di Bash per visualizzare il ramo corrente .

Per esempio:

/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>

l'elemento è un alias e dovrebbe essere presente per gli script di shell interattivi. è probabilmente assente per qualsiasi tipo di script.
Alexander Stohr,

0

Qualcuno potrebbe trovare questo ( ) utile. Il ramo corrente è mostrato con un segno *.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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.