¿Cómo puedo encontrar la ubicación de origen/maestro en git y cómo la cambio?

Resuelto Brian Kelly asked hace 15 años • 13 respuestas

Soy un novato en Git. Recientemente moví un proyecto Rails de Subversion a Git. Seguí el tutorial aquí: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

También estoy usando unfuddle.com para almacenar mi código. Hago cambios en mi computadora portátil Mac en el tren hacia/desde el trabajo y luego los presiono para que se deshagan cuando tengo una conexión de red usando el siguiente comando:

git push unfuddle master

Utilizo Capistrano para implementaciones y extraigo código del repositorio unfuddle usando la rama master.

Últimamente he notado el siguiente mensaje cuando ejecuto "git status" en mi computadora portátil:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

Y estoy confundido en cuanto a por qué. Pensé que mi computadora portátil era el origen... pero no sé si el hecho de que originalmente lo saqué de Subversion o de que entré a Unfuddle es lo que está causando que aparezca el mensaje. Cómo puedo:

  1. ¿Descubrir dónde cree Git que está "origen/maestro"?
  2. Si está en otro lugar, ¿cómo convierto mi computadora portátil en 'origen/maestro'?
  3. Recibe este mensaje para desaparecer. Me hace pensar que Git no está contento con algo.

Mi mac ejecuta Git versión 1.6.0.1.


Cuando ejecuto git remote show originlo sugerido por dbr, obtengo lo siguiente:

~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

Cuando ejecuto git remote -vlo sugerido por Aristóteles Pagaltzis, obtengo lo siguiente:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    [email protected]:spilth/geekfor.git

Ahora, curiosamente, estoy trabajando en mi proyecto en el geekfordirectorio pero dice que mi origen es mi máquina local en el gfdirectorio. Creo que gffue el directorio temporal que utilicé al convertir mi proyecto de Subversion a Git y probablemente desde donde presioné para deshacerme. Entonces creo que saqué una copia nueva de unfuddle algeekfor directorio.

Entonces parece que debería seguir el consejo de dbr y hacer:

git remote rm origin
git remote add origin [email protected]:spilth/geekfor.git
Brian Kelly avatar Nov 10 '08 11:11 Brian Kelly
Aceptado

Llegué a esta pregunta buscando una explicación sobre lo que significa el mensaje "tu rama está adelantada por...", en el esquema general de git. No hubo respuesta a eso aquí, pero dado que esta pregunta aparece actualmente en la parte superior de Google cuando busca la frase "Su rama está por delante de 'origen/maestro'", desde entonces he descubierto lo que realmente significa el mensaje. , Pensé en publicar la información aquí.

Entonces, siendo un novato en git, puedo ver que la respuesta que necesitaba era claramente una respuesta de novato. Específicamente, lo que significa la frase "su sucursal está por delante..." es que hay archivos que agregó y confirmó en su repositorio local, pero que nunca envió al origen. La intención de este mensaje se ve aún más ofuscada por el hecho de que "git diff", al menos para mí, no mostró diferencias. No fue hasta que ejecuté "git diff origin/master" que me dijeron que había diferencias entre mi repositorio local y el maestro remoto.

Entonces, para que quede claro:


"tu rama está por delante..." => Debes enviar al maestro remoto. Ejecute "git diff origin/master" para ver cuáles son las diferencias entre su repositorio local y el repositorio maestro remoto.


Espero que esto ayude a otros novatos.

(Además, reconozco que existen sutilezas de configuración que pueden invalidar parcialmente esta solución, como el hecho de que el maestro puede no ser realmente "remoto" y que "origen" es un nombre reconfigurable usado por convención, etc. Pero los novatos sí lo hacen. No nos importa ese tipo de cosas. Queremos respuestas simples y directas. Podemos leer sobre las sutilezas más adelante, una vez que hayamos resuelto el problema urgente).

Conde

Earl Jenkins avatar Apr 06 '2010 17:04 Earl Jenkins

1.Descubra dónde cree Git que está usando 'origen/maestro'git-remote

git remote show origin

..que devolverá algo como...

* remote origin
  URL: [email protected]:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

Un control remoto es básicamente un enlace a un repositorio remoto. Cuando tu lo hagas..

git remote add unfuddle [email protected]/myrepo.git
git push unfuddle

..git enviará cambios a la dirección que agregaste. Es como un marcador para repositorios remotos.

Cuando ejecuta git status, verifica si al control remoto le faltan confirmaciones (en comparación con su repositorio local) y, de ser así, cuántas confirmaciones. Si envía todos los cambios a "origen", ambos estarán sincronizados, por lo que no recibirá ese mensaje.

2.Si está en otro lugar, ¿cómo convierto mi computadora portátil en 'origen/maestro'?

No tiene sentido hacer esto. Di que "origen" cambia de nombre a "computadora portátil"; nunca querrás hacerlo git push laptopdesde tu computadora portátil.

Si desea eliminar el control remoto de origen, debe hacerlo.

git remote rm origin

Esto no eliminará nada (en términos de contenido de archivo/historial de revisiones). Esto detendrá el mensaje "tu sucursal está adelantada en...", ya que ya no comparará tu repositorio con el remoto (¡porque ya no está!)

Una cosa para recordar es que no tiene nada de especial origin, es solo un nombre predeterminado que usa git.

Git usa originde forma predeterminada cuando haces cosas como git pusho git pull. Entonces, si tienes un control remoto que usas mucho (Unfuddle, en tu caso), te recomendaría agregar unfuddle como "origen":

git remote rm origin
git remote add origin [email protected]:subdomain/abbreviation.git

o haga lo anterior en un comando usando set-url:

git remote set-url origin [email protected]:subdomain/abbreviation.git

Entonces puedes simplemente hacer git pusho git pullactualizar, en lugar degit push unfuddle master

dbr avatar Nov 10 '2008 06:11 dbr

Tuve un problema similar a este donde estaba mi directorio de trabajo ahead of origin by X commitspero el git pullresultado era Everything up-to-date. Logré solucionarlo siguiendo este consejo . Estoy publicando esto aquí en caso de que ayude a alguien más con un problema similar.

La solución básica es la siguiente:

$ git push {remote} {localbranch}:{remotebranch}

Donde las palabras entre paréntesis deben reemplazarse por su nombre remoto, el nombre de su sucursal local y el nombre de su sucursal remota. p.ej

$ git push origin master:master
Mims H. Wright avatar Mar 30 '2011 01:03 Mims H. Wright