Actualización: Bueno, ¡han pasado varios años desde que publiqué esto! Para mi propósito específico de comparar HEAD con aguas arriba, ahora uso@{u}
, que es un atajo que se refiere a HEAD de la rama de seguimiento de aguas arriba. (Ver https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).
Respuesta original: También me he encontrado con este problema. A menudo uso múltiples controles remotos en un solo repositorio, y es fácil olvidar cuál es el seguimiento de su rama actual. Y a veces es útil saber eso, como cuando quieres ver tus confirmaciones locales a través de git log remotename/branchname..HEAD
.
Todo esto se almacena en las variables de configuración de git, pero no tiene que analizar la salida de configuración de git. Si invoca git config seguido del nombre de una variable, solo imprimirá el valor de esa variable, no se requiere análisis. Con eso en mente, aquí hay algunos comandos para obtener información sobre la configuración de seguimiento de su sucursal actual:
LOCAL_BRANCH=`git name-rev --name-only HEAD`
TRACKING_BRANCH=`git config branch.$LOCAL_BRANCH.merge`
TRACKING_REMOTE=`git config branch.$LOCAL_BRANCH.remote`
REMOTE_URL=`git config remote.$TRACKING_REMOTE.url`
En mi caso, dado que solo estoy interesado en averiguar el nombre de mi control remoto actual, hago esto:
git config branch.`git name-rev --name-only HEAD`.remote
git remote show origin
. La respuesta principal en la otra pregunta es un script bash envuelto alrededor de la respuesta simple aquí, que podría ser útil para algunos. Esperemos que esta pregunta no se cierre por completo.