Soy un novato 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 "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 sobre por qué. Pensé que mi computadora portátil era el origen ... pero no sé si el hecho de que originalmente saqué de Subversion o presioné para Desenredar es lo que está haciendo que aparezca el mensaje. Cómo puedo:
- ¿Averigua dónde piensa Git que es 'origen / maestro'?
- Si está en otro lugar, ¿cómo convierto mi computadora portátil en el 'origen / maestro'?
- 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
según lo 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 corro git remote -v
según lo 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 geekfor
directorio pero dice que mi origen es mi máquina local en el gf
directorio. 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 geekfor
directorio.
Parece que debería seguir los consejos de dbr y hacer:
git remote rm origin
git remote add origin [email protected]:spilth/geekfor.git
fuente
origin
repositorio (a pesar de que no es consciente de cómo funciona eso en términos de git): quitar el control remoto difícilmente sería algo útil para él.Llegué a esta pregunta en busca de una explicación acerca de lo que significa el mensaje "su rama está adelante 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'", y desde entonces he descubierto lo que realmente significa el mensaje , Pensé en publicar la información aquí.
Entonces, al ser un novato gitano, puedo ver que la respuesta que necesitaba era una respuesta claramente novata. Específicamente, lo que significa la frase "su rama está adelante por ..." es que hay archivos que ha agregado y comprometido en su repositorio local, pero que nunca han llegado 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 ..." => Debe 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 los novatos sí no nos 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).
Conde
fuente
git diff --cached origin/master
sería una mejor instrucción aquí, ya que establece cuál sería el resultado del próximo impulso? El comando resaltado que tiene arriba también muestra archivos no confirmados y no organizados (creo que también soy un novato git)git fetch
si obtiene este error después de agit pull remote branch
. Tus árbitros pueden estar desactualizados.git fetch
arregla eso.origin/master
significa la partemaster
rama enorigin
repos?# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
Pero git diff origin / master no muestra nada (y la opción --cached no cambia esto). Y, git fetch no cambia esto, git pull no cambia esto, git reset --hard no cambia esto. Para cambiar esto, necesitaba: git reset - hard origin / master Y elijo esa ruta porque otras personas están trabajando conmigo en este repositorio y no quería invalidar sus pruebas, y porque no pude averiguar qué confirma. son.git checkout master
recibo el mensaje, lo que significa que debería hacerlogit pull origin master
antes de trabajar. pero lo encuentro muy confuso porque la redacción del mensaje sugiere lo contrarioTuve un problema similar a este donde estaba mi directorio de trabajo
ahead of origin by X commits
perogit pull
estaba resultandoEverything up-to-date
. Logré arreglarlo 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:
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
fuente
git diff
no mostró nada, y después de hacer lo que describiste ya no recibo este mensaje confuso y molesto.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 / maestrover la respuesta aceptada a esta pregunta
Diferencias entre git pull origin master y git pull origin / master
fuente
Eso es un poco absurdo: se
origin
refiere al repositorio remoto predeterminado, el que generalmente obtiene / extrae los cambios de otras personas.git remote -v
te mostrará lo queorigin
es;origin/master
es su "marcador" para el último estado conocido de lamaster
rama delorigin
repositorio, y el suyomaster
es una rama de seguimiento paraorigin/master
. Esto es todo como debería ser .Usted no Al menos no tiene sentido que un repositorio sea el repositorio remoto predeterminado por sí mismo.
No lo es Simplemente le dice que ha realizado una cantidad de confirmaciones locales que no están en el repositorio remoto (de acuerdo con el último estado conocido de ese repositorio).
fuente
origin
apuntar a la computadora portátil localmente, ya que estar fuera de línea o cambiar de red es un caso muy común para dispositivos portátiles como las computadoras portátiles. De esta manera, puede usarlogit push
y engit pull
cualquier momento, sin necesidad de pensar si está conectado a la red correcta actualmente. Este localorigin
se puede sincronizar con los controles remotos reales automáticamente cuando hay un enlace de red disponible, dependiendo del estado de roaming actual. La parte problemática es cuándo ejecutar qué sincronización, en comparación con eso, la parte GIT es bastante fácil.origin
a otro repositorio en su computadora portátil tiene mucho sentido, claro. Sin embargo, señalar elorigin
repositorio en sí mismo no lo hace: no haría ninguna diferencia si se ejecutagit push
ogit pull
, ya que un repositorio siempre está exactamente sincronizado consigo mismo de todos modos. Es err, algo tautológico.[Solución]
^ esto lo resolvió para mí. Lo que hizo, sincronizó mi maestro (en la computadora portátil) con el "origen" que está en el servidor remoto.
fuente
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.
Creo un clon de rep1 y lo llamo rep2. Miro dentro de rep2 y veo que el archivo es correcto.
En rep1 hago un solo cambio en el archivo y lo confirmo. Luego, en rep1 creo un control remoto para apuntar a rep2 y presionar los cambios.
Ahora, cuando entro en rep2 y hago un 'estado git', me dicen que estoy por delante del origen.
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 estoy captando?
fuente
Está esperando que "empujes". Tratar:
$ git push
fuente
Tuve este problema recientemente 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í
Y luego ejecutó un commit y push.
Eso resolvió el problema.
fuente
Soy un novato git también. Tuve el mismo problema con los mensajes 'su rama está por delante del origen / maestro por N commits'. Hacer el 'git diff origin / master' sugerido mostró algunas diferencias que no me importó mantener. Entonces ...
Como 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)
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
fuente
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.
Obtenga la lista de controles remotos:
Elimina el que no necesitas
fuente
Es posible restablecer una confirmación específica antes de que se realicen sus propias confirmaciones.
Use
git log
para encontrar qué confirmación fue la confirmación que tenía antes de que se produjeran los cambios locales.Tome nota de las confirmaciones locales y restablezca directamente la confirmación anterior:
fuente
Tuve el problema "Tu rama está por delante de 'origin / master' por nn commits". cuando empujé a un repositorio remoto con:
Cuando descubrí que mi dirección remota estaba en el archivo .git / FETCH_HEAD y usé:
El problema desapareció.
fuente