2011-06-23 32 views
30

Tengo un escenario en el que hay varias ramas de rastreo remoto dentro de mi repositorio local con las que debo sincronizar. Nuestro modelo de flujo de trabajo es:¿Cómo puedo saber en qué rama remota "principal" se basa mi sucursal?

  • crea una rama a nivel local, con sede fuera de la rama de seguimiento remoto deseado
  • hacer nuestros cambios
  • construcción/prueba/FIX
  • cometer
  • hacer retroceder a la remota servidor

He notado que el "estado git" no me muestra en qué rama se basa mi sucursal local a menos que algo haya cambiado; es decir, cambios locales no confirmados o una recuperación reciente pone a mi rama local detrás de los tiempos. ¿Hay alguna forma de saber en qué rama se basa mi sucursal local sin tener que cambiar las cosas? Algo así como, "git status -showparentbranch" o algún otro comando que muestre esto. Ocasionalmente me encuentro con esta necesidad pero todavía no sé cómo satisfacerla.

Respuesta

14

Git no rastrea en qué ramas se realizó una confirmación. No hay forma de saberlo. Si los commits ocurrieron en su repositorio, entonces puede inspeccionar el reflog, pero eso es todo. Eche un vistazo a la explicación del DAG en the Pro Git book - también lea en el reflog allí.

También puede visualizar la historia mejor con gitk --all o git log --graph --decorate

Espero que esto ayude.

+3

'git show-branch' le informa acerca de la divergencia, también. –

+1

yup. Buena atrapada. También puede agregar '--oneline' al comando log para ajustar más commits en la pantalla. –

+1

Muchas disculpas. Olvidé comentar sobre si esto respondió mi pregunta o no. No estoy seguro de que sea así. De su respuesta, me pregunto si hice la pregunta correctamente. No estaba tratando de descubrir qué ramas se vieron afectadas por mi compromiso. Más bien, me preguntaba si había alguna forma de saber en qué rama remota se basaba mi sucursal local. –

9

git branch -vv hará lo siguiente:

  • lista todos sus ramas locales
  • pantalla el nombre de la rama remota al lado de cada rama local
  • destacado la rama local activa

. ..de esto podrá determinar la rama remota de la rama activa actual, y más además.

Si tiene muchas sucursales locales, la lista puede ser muy larga. Use git branch -vv | grep SOMEWORD para limitar la salida solo a las ramas que contienen SOMEWORD. Si puede pensar en una palabra única para su sucursal, obtendrá el mejor filtro (solo un resultado).

También obtendrá algunos datos adicionales en la salida, es decir, el número (SHA1) y el mensaje de la última confirmación. El filtro grep se aplicará a estos a. No pude encontrar una manera de excluirlo.

Desde el Git branch documentation:

-v

-vv

--verbose

Cuando en el modo de lista, espectáculo sha1 y comprometerse línea de asunto para cada cabeza, a lo largo de con relación a la rama ascendente (si existe). Si se administra dos veces, imprima también el nombre de la rama ascendente (vea también git remote show).

(Basado en su comentario, sí, parece que la pregunta 'correcta' preguntaría por la rama "a distancia" en lugar de la rama "padre". Pero eso es lo que buscaba también! :))

35

probar esto:

git log --graph --decorate 
+5

También debe agregar el indicador '--oneline' para hacer el mejor uso de su pantalla de bienes raíces. – cmaster

2

también podría darle una oportunidad:

git rev-parse --abbrev-ref --symbolic-full-name @{u} 

Y usando este alias en el archivo de .gitconfig:

[alias] 
    showparentbranch = rev-parse --abbrev-ref --symbolic-full-name @{u} 

A continuación, podría llamar simplemente:

git showparentbranch 

Probado en la versión git 2.10.2.windows.1

Cuestiones relacionadas