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 gitbash, 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 foocontinuación,git branchno pudieron demostrar la ramafoo. Mientras quegit symbolic-ref HEADcomo 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 branchmuestra* (no branch), lo que también es inútil ...git rev-parse --abbrev-ref HEAD 2>/dev/nullLa 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 HEADque 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 HEADmuestraHEADcuando estás en la cabeza separada.git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"ya que mostrará una cadena comoHEAD detached at a63917fcuando 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 285f294git describe --allheads/masterheads/master(nota: noremotes/origin/master)remotes/origin/feature-foov1.2.3remotes/origin/HEADv1.0.6-5-g2393761cat .git/HEAD:ref: refs/heads/mastercat: .git/HEAD: Not a directorygit rev-parse --abbrev-ref HEADmasterHEADgit symbolic-ref --short HEADmasterfatal: 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 describetiene 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 branchy solo la usarégit describesi el resultado es algo sobre un cabezal separado.git branch --no-colorpara 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-187No funciona como se esperabagit branch --listsolo dice* (HEAD detached at 7127db5). Hacergit rev-parse --abbrev-ref HEADsolo diceHEADy 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
mastersucursal. 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 statusy obtener solo la primera línea de salida con lagit status | head -1que 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 statuspuede llevar mucho tiempo devolver un valor si se gestionan muchos archivos.git statuspuede 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 branchmostrar 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 --containsveces 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:
awklee 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 statusTambién ayuda.Cómo git-prompt.sh desde
contrib/lo hace (GIT versión 2.3.0), como se define en__git_ps1funció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/HEADarchivo es un enlace simbólico (un caso muy raro, de la historia antigua de Git), utilizagit symbolic-ref HEAD 2>/dev/nullDe lo contrario, lee el
.git/HEADarchivo. 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/HEADes 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 HEADlo 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-0001v3.29.5fuente
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 2O
git status | sed -n 1p | cut -d' ' -f 3O (más detallado)
git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1pfuente
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-refparte también necesita--shortevitar 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 cbrpara imprimir el nombre de la rama actual.Esto funciona porque el
gitcomando toma su primer argumento e intenta ejecutar un script que se conoce con el nombre degit-arg1. Por ejemplo,git branchintenta 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 statustodo el tiempo. Github repo git-aware-prompt .Abra su terminal (ctrl-alt-t) e ingrese los comandos
Edite su .bashrc con el
sudo nano ~/.bashrccomando (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á* masterlo 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 HEADSi 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| revse puede simplificar conawk '{print $NF}'checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9que 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 -1serí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
PS1uso 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.gitcarpeta existe o no.fuente