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

StackOverflow https://stackoverflow.com/questions/277077

  •  07-07-2019
  •  | 
  •  

Pregunta

Soy un novato de 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 desenrollen cuando tengo una conexión de red con el siguiente comando:

git push unfuddle master

Utilizo Capistrano para las implementaciones y extraigo el código del repositorio desplegado usando la rama maestra.

Últimamente he notado el siguiente mensaje cuando ejecuto "estado de git" en mi laptop:

# 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 saqué de Subversion o empujé a Unfuddle es lo que está haciendo que aparezca el mensaje. ¿Cómo puedo:

  1. ¿Descubre dónde Git piensa que es 'origen / maestro'?
  2. Si está en otro lugar, ¿cómo convierto mi computadora portátil en el '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 origin como lo sugiere 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 -v como lo sugiere Aristóteles Pagaltzis, obtengo lo siguiente:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

Ahora, curiosamente, estoy trabajando en mi proyecto en el directorio geekfor pero dice que mi origen es mi máquina local en el directorio gf . Creo que gf fue el directorio temporal que utilicé al convertir mi proyecto de Subversion a Git y probablemente desde donde empujé para desenredar. Entonces creo que he extraído una copia nueva de Unuddle al directorio geekfor .

Parece que debería seguir los consejos de dbr y hacer:

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
¿Fue útil?

Solución

  

1. Descubra dónde Git piensa que 'origin / master' está utilizando git-remote

git remote show origin

..que devolverá algo así como ...

* remote origin
  URL: me@remote.example.com:~/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 lo hagas ...

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

..git empujará los cambios a esa dirección que agregó. Es como un marcador, para repositorios remotos.

Cuando ejecuta git status , comprueba si faltan confirmaciones en el control remoto (en comparación con su repositorio local) y, en caso afirmativo, en cuántas confirmaciones. Si empuja todos sus 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 'origin / master'?

No tiene sentido hacer esto. Decir "origen" se renombra a " laptop " - nunca quieres hacer git push laptop desde tu laptop.

Si desea eliminar el control remoto de origen, hágalo ...

git remote rm origin

Esto no eliminará nada (en términos de contenido de archivo / historial de revisiones). Esto detendrá el " su rama está adelante por ... " mensaje, ya que ya no comparará su repositorio con el control remoto (¡porque se ha ido!)

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

Git usa origin por defecto cuando haces cosas como git push o git pull . Entonces, si tiene un control remoto que usa mucho (Unfuddle, en su caso), recomendaría agregar unududdle como "origen":

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

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

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

Luego, simplemente puede hacer git push o git pull para actualizar, en lugar de git push desacoplar maestro

Otros consejos

Llegué a esta pregunta en busca de una explicación acerca de cuál es el mensaje "su rama está adelante por ..." significa, en el esquema general de git. No hubo respuesta a eso aquí, pero como esta pregunta aparece actualmente en la parte superior de Google cuando buscas la frase "Tu rama está por delante de" origen / maestro ", y desde entonces he descubierto cuál es el mensaje realmente significa que pensé en publicar la información aquí.

Entonces, siendo un novato gitano, puedo ver que la respuesta que necesitaba era una respuesta claramente novata. Específicamente, cuál es el " su rama está adelante por ... " La frase significa que hay archivos que ha agregado y comprometido en su repositorio local, pero que nunca ha enviado al origen. La intención de este mensaje se ofusca aún más 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 ser claros:


" su rama está adelante por ... " = > Necesita empujar 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 hay 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 utilizado por convención, etc. Pero a los novatos no les importa ese tipo de cosas. Queremos respuestas simples y directas. Podemos leer sobre las sutilezas más tarde, una vez que hayamos resuelto el problema apremiante).

Earl

Tuve un problema similar a este en el que mi directorio de trabajo estaba delante del origen por X commits pero el git pull estaba dando como resultado Todo arriba- hasta la fecha . 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. por ejemplo,

$ git push origin master:master

a veces hay una diferencia entre la versión local en caché del maestro de origen (origen / maestro) y el maestro de origen verdadero.

Si ejecuta git remote update , esto resincronizará origen maestro con origen / maestro

ver la respuesta aceptada a esta pregunta

Diferencias entre git pull origin master & amp; git pull origin / master

  

Pensé que mi computadora portátil era el origen ...

Eso no tiene sentido: origin se refiere al repositorio remoto predeterminado, el que generalmente obtiene / extrae los cambios de otras personas.

  

¿Cómo puedo:

  1. git remote -v le mostrará lo que es origin ; origin / master es su "marcador" para el último estado conocido de la rama master del repositorio origin y su propio maestro es una rama de seguimiento para origin / master . Esto es todo como debería ser .

  2. No lo haces. Al menos no tiene sentido que un repositorio sea el repositorio remoto predeterminado para sí mismo.

  3. No lo es. Simplemente le dice que ha realizado una cantidad de confirmaciones locales que no están en el repositorio remoto (según el último estado conocido de ese repositorio).

[Solución]

$ git push origin

^ esto lo resolvió para mí. Lo que hizo, sincronizó mi maestro (en la computadora portátil) con " origen " eso está en el servidor remoto.

Estoy luchando con este problema y ninguna de las respuestas anteriores aborda la pregunta tal como la veo. He eliminado el problema de nuevo a lo básico para ver si puedo aclararlo.

Creo un nuevo repositorio (rep1), pongo un archivo y lo confirmo.

mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"

Creo un clon de rep1 y lo llamo rep2. Miro dentro de rep2 y veo que el archivo es correcto.

cd ~
git clone ~/rep1 rep2
cat ~/rep2/README

En rep1 hago un solo cambio en el archivo y lo confirmo. Luego, en rep1 creo un control remoto para apuntar a rep2 y empujar los cambios.

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

Ahora, cuando entro en rep2 y hago un 'estado de git', me dicen que estoy por delante del origen.

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#

README en rep2 es como era originalmente, antes de la segunda confirmación. Las únicas modificaciones que he hecho son rep1 y todo lo que quería hacer era empujarlas a rep2. ¿Qué es lo que no entiendo?

Está esperando que '' presione ''. Prueba:

$ git push

Recientemente tuve este problema y pensé que era porque había eliminado algunos archivos que ya no necesitaba. El problema es que git no sabe que los archivos han sido eliminados y ve que el servidor todavía lo tiene. (servidor = origen)

Entonces corrí

git rm $(git ls-files --deleted)

Y luego ejecutó un commit y push.

Eso resolvió el problema.

También soy un novato git. Tuve el mismo problema con los mensajes 'su rama está por delante del origen / maestro por N commits'. Hacer el sugerido 'git diff origin / master' mostró algunas diferencias que no me importaba mantener. Entonces ...

Dado que mi clon de git era para alojar, y quería una copia exacta del repositorio principal, y no me importaba mantener los cambios locales, decidí guardar mi repositorio completo y crear uno nuevo:

(en la máquina de alojamiento)

mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo

Por conveniencia, solía hacer cambios en el clon en mi máquina de alojamiento. No más. Haré esos cambios en el maestro, git commit allí y haré un git pull. Con suerte, esto debería mantener mi clon git en la máquina de alojamiento en completa sincronización.

/ Nara

Me preguntaba lo mismo sobre mi repositorio. En mi caso, tenía un viejo control remoto que ya no estaba presionando, así que necesitaba quitarlo.

Obtener una lista de controles remotos:

git remote

Elimine el que no necesita

git remote rm {insert remote to remove}

Es posible restablecer una confirmación específica antes de que se realicen sus propias confirmaciones.

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

Use git log para encontrar qué commit era el commit que tenía antes de que se produjeran los cambios locales.

$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

Tome nota de las confirmaciones locales y restablezca directamente la confirmación anterior:

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

Tuve el problema '' Tu rama está por delante de 'origin / master' por nn commits ''. cuando empujé a un repositorio remoto con:

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

Cuando descubrí que mi dirección remota estaba en el archivo .git / FETCH_HEAD y usé:

git push

el problema desapareció.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top