Soy de un fondo de Subversion y, cuando tenía una rama, sabía en qué estaba trabajando con "Estos archivos de trabajo apuntan a esta rama".
Pero con Git no estoy seguro cuando estoy editando un archivo en NetBeans o Notepad ++, si está vinculado al maestro u otra rama.
No hay problema con git
bash, me dice lo que estoy haciendo.
git
branch
git-branch
mike628
fuente
fuente
.git/HEAD
, posiblemente en un directorio padregit branch --show-current
. Mira mi respuesta aquí .Respuestas:
debería mostrar todas las sucursales locales de su repositorio. La rama destacada es tu rama actual.
Si desea recuperar solo el nombre de la sucursal en la que se encuentra, puede hacer lo siguiente:
fuente
git checkout --orphan foo
continuación,git branch
no pudieron demostrar la ramafoo
. Mientras quegit symbolic-ref HEAD
como se sugirió otra respuesta funcionó.Para mostrar la rama actual en la que se encuentra, sin las otras ramas enumeradas, puede hacer lo siguiente:
Referencia:
fuente
git branch
muestra* (no branch)
, lo que también es inútil ...git rev-parse --abbrev-ref HEAD 2>/dev/null
La parte / dev / null evita que vea un error si acaba de crear un nuevo repositorio que aún no tiene HEAD.También tiene
git symbolic-ref HEAD
que muestra la especificación de referencia completa.Para mostrar solo el nombre de la rama en Git v1.8 y posterior (gracias a Greg por señalarlo):
En Git v1.7 + también puedes hacer:
Ambos deben dar el mismo nombre de rama si estás en una rama. Si estás en una cabeza separada, las respuestas son diferentes.
fuente
git rev-parse --abbrev-ref HEAD
muestraHEAD
cuando estás en la cabeza separada.git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"
ya que mostrará una cadena comoHEAD detached at a63917f
cuando está en un estado separado, a diferencia de las otras respuestas que no muestran nada o HEAD. Esto es importante.Para mi propia referencia (pero podría ser útil para otros), hice una descripción general de la mayoría de las técnicas (línea de comando básica) mencionadas en este hilo, cada una aplicada a varios casos de uso: HEAD es (señalando):
Resultados:
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
(nota: noremotes/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
(FYI esto se hizo con git versión 1.8.3.1)
fuente
git describe --all --exact-match 2>/dev/null | sed 's=.*/=='
fue la mejor solución para mí (buenos nombres para etiquetas y cabezales de rama, sin salida para cabezas separadas al azar.git describe
tiene una falla grave cuando hay varias ramas que hacen referencia a la misma confirmación, por ejemplo, justo despuésgit checkout -b foo
: usa una de ellas arbitrariamente (parece que tal vez sea la más reciente). Cambiaré mi estrategia para usar la salida filtradagit branch
y solo la usarégit describe
si el resultado es algo sobre un cabezal separado.git branch --no-color
para asegurarme de que el nombre del archivo no tenga códigos de escape de terminal molestos.A partir de la versión 2.22 de git, podría usar:
Según la página del manual:
fuente
Una alternativa más:
fuente
echo ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
git checkout master && git name-rev --name-only HEAD # ac-187
No funciona como se esperabagit branch --list
solo dice* (HEAD detached at 7127db5)
. Hacergit rev-parse --abbrev-ref HEAD
solo diceHEAD
y así sucesivamente.Bueno, lo suficientemente simple, lo obtuve en una línea (bash)
(crédito: Expiación limitada)
Y mientras estoy allí, el único revestimiento para obtener la rama de seguimiento remoto (si corresponde)
fuente
sed -n 's/\* //p'
hace el truco. Aunque tiendo hacia lo paranoico, entonces lo anclaríased -n 's/^\* //p'
.Simplemente puede escribir en la línea de comandos (consola) en Linux, en el directorio del repositorio:
y verá un texto, entre los cuales hay algo similar a:
lo que significa que actualmente estás en una
master
sucursal. Si está editando algún archivo en ese momento y está ubicado en el mismo repositorio local (directorio local que contiene los archivos que están bajo la administración del control de versiones de Git), está editando el archivo en esta rama.fuente
git status
y obtener solo la primera línea de salida con lagit status | head -1
que se obtiene algo así# On branch master
. Estoy seguro de que las diferencias de versión también deberán tenerse en cuenta.git status | grep 'On branch'
, lo que debería tener el mismo efecto (debería, no significa que lo hará si su versión de Git lo muestra de manera diferente). O biengit branch | grep '*'
, que mostrará el nombre de la rama con una estrella al comienzo.<tick>git status | head -1<tick>.gsub('# On branch ', '')
git status
puede llevar mucho tiempo devolver un valor si se gestionan muchos archivos.git status
puede acumular el tiempo de generación de toda la página.Lo uso en scripts que necesitan el nombre de la rama actual. Le mostrará la referencia simbólica corta actual a HEAD, que será su nombre de rama actual.
fuente
solo mostrará el nombre de la sucursal
fuente
git branch
mostrar solo el nombre de la sucursal actual.Si bien git branch le mostrará todas las ramas y resaltará la actual con un asterisco, puede ser demasiado engorroso cuando se trabaja con muchas ramas.
Para mostrar solo la rama en la que se encuentra actualmente, use:
fuente
git branch --contains
veces enumera más de una rama.Encontré una solución de línea de comando de la misma longitud que la de Oliver Refalo , usando buena ol 'awk:
awk
lee eso como "hacer las cosas en{}
líneas que coinciden con la expresión regular". Por defecto, asume campos delimitados por espacios en blanco, por lo que imprime el segundo. Si puede suponer que solo la línea con su rama tiene el *, puede soltar el ^. Ah, bash golf!fuente
fuente
¿Por qué no usar el indicador de shell de git-aware, que le dirá el nombre de la rama actual?
git status
También ayuda.Cómo git-prompt.sh desde
contrib/
lo hace (GIT versión 2.3.0), como se define en__git_ps1
función de ayuda:Primero, hay un caso especial si se detecta rebase en progreso. Git usa una rama sin nombre (HEAD separada) durante el proceso de rebase para hacerlo atómico, y la rama original se guarda en otro lugar.
Si el
.git/HEAD
archivo es un enlace simbólico (un caso muy raro, de la historia antigua de Git), utilizagit symbolic-ref HEAD 2>/dev/null
De lo contrario, lee el
.git/HEAD
archivo. Los siguientes pasos dependen de su contenido:Si este archivo no existe, entonces no hay una rama actual. Esto suele suceder si el repositorio está vacío.
Si comienza con el
'ref: '
prefijo, entonces.git/HEAD
es symref (referencia simbólica), y estamos en la rama normal. Elimine este prefijo para obtener el nombre completo, y eliminerefs/heads/
para obtener el nombre corto de la rama actual:Si no comienza con
'ref: '
, entonces se separa HEAD (rama anónima), apuntando directamente a alguna confirmación. Se usagit describe ...
para escribir el commit actual en forma legible para humanos.Espero que eso ayude.
fuente
git describe --contains --all HEAD
lo que actualmente no veo en ninguna otra parte de esta página. Como estoy seguro de que sabe, las respuestas de solo enlace no se recomiendan en StackOverflow.git-prompt.sh
(aka__git_ps1
) lo hace ...Una versión menos ruidosa para el estado de git haría el truco
Se imprime
fuente
Lo siento, esta es otra respuesta de la línea de comandos, pero eso es lo que estaba buscando cuando encontré esta pregunta y muchas de estas respuestas fueron útiles. Mi solución es la siguiente función bash shell:
Esto siempre debería darme algo que sea legible para los humanos y directamente utilizable como argumento
git checkout
.feature/HS-0001
v3.29.5
fuente
git checkout
.puede usar git bash en el comando del directorio de trabajo es el siguiente
le dirá en qué rama se encuentra hay muchos comandos que son útiles, algunos de ellos son
--short Proporciona la salida en formato corto.
-b --branch Muestra la rama y la información de seguimiento incluso en formato corto.
--porcelain [=] Proporcione la salida en un formato fácil de analizar para los scripts. Esto es similar a la salida corta, pero se mantendrá estable en todas las versiones de Git e independientemente de la configuración del usuario. Ver abajo para más detalles.
El parámetro versión se usa para especificar la versión del formato. Esto es opcional y el formato predeterminado es la versión original v1.
--long Proporciona la salida en formato largo. Este es el valor predeterminado.
-v --verbose Además de los nombres de los archivos que se han cambiado, también se muestran los cambios de texto que se realizarán por etapas (es decir, como la salida de git diff --cached). Si -v se especifica dos veces, también muestra los cambios en el árbol de trabajo que aún no se han organizado (es decir, como la salida de git diff).
fuente
también le dará el nombre de la sucursal junto con los cambios.
p.ej
fuente
Con el tiempo, podríamos tener una lista muy larga de sucursales.
Si bien algunas de las otras soluciones son excelentes, esto es lo que hago (simplificado de la respuesta de Jacob):
Ahora,
funciona, pero solo si hay algún cambio local
fuente
Recomiendo usar cualquiera de estos dos comandos.
git branch | grep -e "^*" | cut -d' ' -f 2
O
git status | sed -n 1p | cut -d' ' -f 3
O (más detallado)
git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p
fuente
En Netbeans, asegúrese de que las anotaciones de versiones estén habilitadas (Ver -> Mostrar etiquetas de versiones). Luego puede ver el nombre de la sucursal junto al nombre del proyecto.
http://netbeans.org/bugzilla/show_bug.cgi?id=213582
fuente
¿Qué hay de esto?
fuente
symbolic-ref
parte también necesita--short
evitar prefijar el nombre de la ramarefs/heads/
?Tengo un script simple llamado
git-cbr
( rama actual ) que imprime el nombre de la rama actual.Puse este script en una carpeta personalizada (
~/.bin
). La carpeta está adentro$PATH
.Entonces, cuando estoy en un repositorio de git, simplemente escribo
git cbr
para imprimir el nombre de la rama actual.Esto funciona porque el
git
comando toma su primer argumento e intenta ejecutar un script que se conoce con el nombre degit-arg1
. Por ejemplo,git branch
intenta ejecutar un script llamadogit-branch
, etc.fuente
Puede configurar permanentemente su salida de bash para mostrar su nombre de git-branch. Es muy útil cuando trabajas con diferentes ramas, no necesitas escribir
$ git status
todo el tiempo. Github repo git-aware-prompt .Abra su terminal (ctrl-alt-t) e ingrese los comandos
Edite su .bashrc con el
sudo nano ~/.bashrc
comando (para Ubuntu) y agregue lo siguiente en la parte superior:Luego pegue el código
al final del mismo archivo en el que pegó el código de instalación anteriormente. Esto le dará la salida coloreada:
fuente
El siguiente comando de shell te dice en qué rama estás actualmente.
Cuando no desee escribir ese comando largo cada vez que desee conocer la rama y esté usando Bash, asigne al comando un alias corto, por ejemplo
cb
, alias , de esta manera.Cuando esté en la rama maestra y su solicitud sea
$
, obtendrá* master
lo siguiente.fuente
git branch | grep '^\*'
Devuelve el nombre de la rama o SHA1 cuando está en la cabeza separada:
Esta es una versión corta de la respuesta de @ dmaestro12 y sin soporte de etiquetas.
fuente
git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
Si realmente desea que la última rama / etiqueta se desproteja también en estado HEAD separado.
Actualización Esto es mejor si tienes y no tienes miedo de awk.
fuente
rev | cut -d' ' -f1| rev
se puede simplificar conawk '{print $NF}'
checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9
que sigue siendo un truco útil que podría ayudar a desambiguar algunos casos.git reflog | awk '$3=="checkout:" {print $NF; exit}'
Sé que esto es tarde, pero en un linux / mac, desde la terminal puedes usar lo siguiente.
Explicación:
git status -> obtiene el estado del árbol de trabajo
sed -n 1p -> obtiene la primera línea del cuerpo del estado
La respuesta al comando anterior se verá de la siguiente manera:
fuente
head -1
sería la forma habitualTambién puede usar la variable GIT_BRANCH como aparece aquí: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
El complemento git establece varias variables de entorno que puede usar en sus scripts:
GIT_COMMIT - SHA del actual
GIT_BRANCH - Nombre de la rama que se está utilizando actualmente, por ejemplo, "maestro" u "origen / foo"
GIT_PREVIOUS_COMMIT - SHA de la confirmación compilada anterior de la misma rama (el SHA actual en la primera compilación en la rama)
GIT_URL: URL remota del repositorio
GIT_URL_N: URL remotas del repositorio cuando hay más de 1 control remoto, por ejemplo, GIT_URL_1, GIT_URL_2
GIT_AUTHOR_EMAIL - Correo electrónico del autor / autor
GIT_COMMITTER_EMAIL - Correo electrónico del autor / autor
fuente
Agréguelo al
PS1
uso de Mac:Antes de ejecutar el comando anterior:
Después de ejecutar ese comando:
No se preocupe, si no es un repositorio GIT, no mostrará un error debido a
[-d .git]
que comprueba si la.git
carpeta existe o no.fuente