Mostrar solo la sucursal actual en Git


356

Intenté buscar un comando Git especial para esto, pero no pude encontrar uno. ¿Hay algo más corto o más rápido que lo siguiente?

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

1
Creo que esta es la manera posible con mayor crecimiento para obtener rama actual
Eimantas


@ChandrayyaGK: No, porque la otra pregunta es sobre hacerlo desde su IDE. (Muchas de las respuestas son para el uso de la línea de comandos, por lo que vale la pena echarle un vistazo, pero no es un duplicado adecuado, y esas respuestas tal vez deberían migrarse aquí, si hay alguna que agregue un valor significativo a lo que ya está aquí).
tripleee

3
@Torek: aquí hay otra tarea simple que Git dificulta.
jww

¡La respuesta principal al enlace @ChandrayyaGK publicado es mucho más lenta que esta!
Colm Bhandal

Respuestas:


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

Esto debería funcionar con Git 1.6.3 o más reciente.


Tampoco funciona para mí, con git-1.6.2.5. git rev-parse --abbrev-ref HEAD => --abbrev-ref 311172491a9a667f9321bdf1c4fe5e22cc6e2c08 (es decir, rev-parse no acepta --abbrev-ref (tampoco en la página de manual))
JasonWoof

1
JasonWoof, trabaja para mí en 1.6.4.2, necesito cambiar el registro para ver cuándo sucedió exactamente ;-)
Michael Krelin - hacker

77
Por lo que puedo decir de los registros de Git, esta característica se fusionó en 2009-04-20 y se lanzó con la versión 1.6.3.
earl

1
Realmente me gustaría entender eso también. ¿Cómo funciona esto realmente? Además, parece que --abbrev-ref no devuelve nada por ningún otro argumento. No puede tener HEAD como argumento.
Setafire

66
Tenga en cuenta que si se encuentra en una referencia simbólica separada (podría significar que está en una rama, pero desprotegido el commit anterior), este comando solo devolverá HEAD, no se esperamaster
unifreak

129

En Git 1.8.1 puede usar el comando git symbolic-ref con la opción "--short":

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

Gracias. Alias ​​creado.
Michael Burr

77
Mejor que la respuesta aceptada OMI, porque funciona en repositorios sin compromisos
Jerome Dalbert

2
Obteniendo el error fatal: ref HEAD is not a symbolic refal ejecutar esto como parte de una compilación de
TravisCI

no parecía funcionar en GIT 1.9.1 `` `git versión 1.9.1 fatal: ref HEAD no es una referencia simbólica` `
Richard

Funciona para mí: git versión 2.16.2.windows.1
Tagc

59

Con Git 2.22 (Q2 2019), tendrá un enfoque más simple: git branch --show-current .

Ver commit 0ecb1fc (25 de octubre de 2018) por Daniels Umanovskis ( umanovskis) .
(Fusionada por Junio ​​C Hamano - gitster- en commit 3710f60 , 07 mar 2019)

branch: introducir la --show-currentopción de visualización

Cuando se llama con --show-current, git branchimprimirá el nombre de la sucursal actual y finalizará.
Solo se imprime el nombre real, sin refs/heads.
En el estado HEAD separado, no se emite nada.

Destinado tanto para scripting como para uso interactivo / informativo.
A diferencia git branch --list, no se necesita filtrado para obtener el nombre de la sucursal.


15
Finalmente, ¡lo que parece que debería haber estado allí desde el principio, se ha agregado!
dtasev

27

Te puede interesar la salida de

git symbolic-ref HEAD

En particular, dependiendo de sus necesidades y diseño, es posible que desee hacer

basename $(git symbolic-ref HEAD)

o

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

y luego nuevamente está el .git/HEADarchivo que también puede ser de su interés.


2
Puedes acortar git rev-parse --symbolic-full-namea git symbolic-ref.
earl

1
No necesita usar basenameo cut; use BR=${BR#refs/heads/}(donde BR es el nombre de la variable de la que guardó la salida git symbolic-ref HEAD).
Jakub Narębski

Jakub, por supuesto que no, siempre que tenga la salida en variable.
Michael Krelin - hacker

55
puede hacer git symbolic-ref --short HEADtambién
Fahad Siddiqui

2
Esto se interrumpirá si tiene barras en los nombres de sus sucursales ("task / foo", "feature / bar"). Un montón de mis buildscripts comenzó a fallar cuando los colegas decidieron que las barras eran frescas ...
Vacri

13

Por lo que puedo decir, no hay forma de mostrar de forma nativa solo la rama actual en Git, por lo que he estado usando:

git branch | grep '*'

3
Si bien eso funciona con GNU coreutils, grep '*'nominalmente es un error de sintaxis. Probablemente quieras de git branch | sed -n 's/^\* //p'todos modos. O, en realidad, lo que el OP publicó en primer lugar, lo que equivale a lo mismo.
tripleee

@tripleee, ¿puedes aclararme acerca de por qué grep '*'es nominalmente un error de sintaxis?
JK ABC

1
@JKABC: lo que @tripleee quiso decir es que '*'es una expresión regular y, como tal, no es válida. Probablemente desee utilizar '[*]'(es decir, el carácter en *lugar del operador "cero o más veces").
johndodo

2
@johndodo gracias por la aclaración, tiene sentido para mí ahora. Normalmente lo hago porgrep '\*'
JK ABC

2
solo puede cortar el nombre de la rama congit branch | grep "*" | cut -d' ' -f2
Fahad Siddiqui

7

Supongo que esto debería ser rápido y puede usarse con una API de Python:

git branch --contains HEAD
* master

44
Esto no genera la rama actual. Produce la lista de ramas a las que apuntan los puntos de confirmación HEAD. Y sí, puede superponerse, pero esto podría conducir a malentendidos. Cree una nueva rama desde donde se encuentre y vuelva a intentar su línea: dos ramas. La pregunta pide " solo la rama actual ".
RomainValeri

4

Estoy usando

/etc/bash_completion.d/git

Llegó con Git y proporciona un mensaje con el nombre de la rama y la finalización del argumento.


¿Cómo se puede activar este aviso?
Alex

En ubuntu, $ source /etc//bash_completion.d/git-prompt File puede ser nombrado de manera diferente en diferentes sistemas. (Nota: la sourcepalabra clave es lo mismo que solo .(punto) en bash.)
michael

1

Esto no es más corto, pero también trata con ramas separadas:

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

1

Para completar, echo $(__git_ps1)al menos en Linux, debería darle el nombre de la rama actual rodeada de paréntesis.

Esto puede ser útil en algunos escenarios, ya que no es un comando Git (aunque depende de Git), especialmente para configurar el símbolo del sistema Bash para mostrar la rama actual .

Por ejemplo:

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

el elemento es un alias y debe estar presente para los scripts de shell interactivos. probablemente esté ausente para cualquier tipo de guiones.
Alexander Stohr

0

Alguien puede encontrar esto ( ) útil. La rama actual se muestra con una marca *.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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.