¿Cómo se produce esto realmente?
Estoy trabajando en un repositorio solo en este momento, así que este es mi flujo de trabajo:
- Cambiar archivos
- Cometer
- Repita 1-2 hasta que esté satisfecho
- Empujar para dominar
Luego, cuando hago un git status
mensaje, me dice que mi rama está adelante por X commits (presumiblemente la misma cantidad de commits que he realizado). ¿Es porque cuando empuja el código en realidad no actualiza sus archivos almacenados localmente en caché (en las carpetas .git)? git pull
parece "arreglar" este extraño mensaje, pero todavía tengo curiosidad por saber por qué sucede, ¿tal vez estoy usando git mal?
incluyendo qué rama está impresa en el mensaje
Mi sucursal local está por delante del maestro
donde empujas / jalas la rama actual
Estoy presionando a GitHub y tirando a cualquier computadora en la que esté trabajando en ese momento, mi copia local siempre está completamente actualizada, ya que soy la única que trabaja en ella.
en realidad no verifica el repositorio remoto
Eso es lo que pensé, pensé que me aseguraría de que mi comprensión fuera correcta.
¿Le estás pasando algunos argumentos adicionales?
No son las que puedo ver, ¿tal vez hay alguna configuración divertida en mi extremo?
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
fuente
push
y cuáles son tus configuraciones de configuración remota y de sucursal?git status
no verifica el repositorio remoto, logit pull
hace. Si tiene una rama de seguimiento para un repositorio al que ingresa,git push
actualizará su rama de seguimiento local para reflejar el nuevo estado de la rama remota si su inserción es exitosa. Es por eso que pregunté sobre la configuración del autor de la pregunta porque si no está sucediendo correctamente, probablemente haya un error de configuración.git status
? ¿De Verdad? migit status
nunca me dice qué tan adelante está mi rama ... ¿le estás pasando algunos argumentos adicionales?git status
no va al repositorio remoto para verificar si la rama remota se ha actualizado. Le indica qué tan lejos está su sucursal local en comparación con su sucursal de seguimiento remoto almacenada localmente . El problema es que un normalgit push
(además de buscar y extraer) debería actualizar la rama de seguimiento remoto y para el que pregunta no parece estar funcionando. Para ver por qué necesitamos ver tanto la forma exacta degit push
eso como la configuración del repositorio local, pero como el autor de la pregunta ya ha aceptado una respuesta, no puedo ver que esto suceda ahora.Respuestas:
Si recibe este mensaje después de hacer un
git pull remote branch
, intente seguirlo con ungit fetch
. (Opcionalmente, ejecutegit fetch -p
para podar ramas eliminadas del repositorio)Fetch parece actualizar la representación local de la rama remota, lo que no necesariamente sucede cuando haces una
git pull remote branch
.fuente
Utilizar
La opción --rebase significa que git moverá su confirmación local a un lado, se sincronizará con la remota y luego intentará aplicar sus confirmaciones desde el nuevo estado.
fuente
$ git pull --rebase Current branch xyz is up to date. $ git status On branch xyz Your branch is ahead of 'origin/xyz' by 6 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean
git
, ¡y nunca vuelva a escribir el historial sin pensar!Use estos 3 comandos simples
Paso 1 :
git checkout <branch_name>
Paso 2 :
git pull -s recursive -X theirs
Paso 3 :
git reset --hard origin/<branch_name>
Más detalles: https://stackoverflow.com/a/39698570/2439715
Disfrutar.
fuente
git reset --hard origin/master
aclarado para mí.Creo que está leyendo mal el mensaje: su rama no está adelantada
master
, lo estámaster
. Es por delante deorigin/master
, que es una rama de seguimiento remoto que registra el estado del repositorio remoto desde su últimapush
,pull
ofetch
. Te está diciendo exactamente lo que hiciste; te adelantaste al control remoto y te recuerda empujar.fuente
Alguien dijo que podrías estar leyendo mal tu mensaje, no lo estás. Este problema realmente tiene que ver con su
<project>/.git/config
archivo. En ella habrá una sección similar a esta:Si elimina la línea de búsqueda del archivo .git / config de su proyecto, detendrá "Su rama está por delante de 'origin / master' por
N
commits". molestia de ocurrir.O eso espero. :)
fuente
ahead by x commits
mensaje. No he visto el mensaje en mucho tiempo.Tuve este problema en mi servidor de escenario donde solo hago pulls. Y el restablecimiento completo me ayudó a limpiar HEAD de la misma manera que el control remoto.
Entonces ahora tengo otra vez:
fuente
Esto funciono para mi
git reset --hard origin/master
La salida debe verse como
On branch dev HEAD is now at ae1xc41z Last commit message
fuente
En mi caso fue porque cambié a maestro usando
Solo para sacar la nueva versión de la misma en lugar de
El primer comando restablece la cabeza del maestro a mis últimas confirmaciones
solía
Para arreglar eso
fuente
Revisé todas las soluciones en esta página y, afortunadamente, @ anatolii-pazhyn comentó porque su solución fue la que funcionó. Desafortunadamente, no tengo suficiente reputación para votarlo, pero recomiendo probar su solución primero:
Lo que me dio:
Yo también recomiendo:
También puedes usar:
La mejor de las suertes
fuente
Tuve este mismo problema en una máquina con Windows. Cuando ejecutaba un
git pull origin master
comando, recibía la advertencia "delante de 'origin / master' by X commits". Descubrí que si en su lugar ejecutégit pull origin
y NO especifiqué la rama, ya no recibiría la advertencia.fuente
git fetch
detrás de escena.Simplemente le recuerda las diferencias entre la rama actual y la rama que hace la pista actual. Proporcione más información, incluyendo qué rama se imprime en el mensaje y dónde empuja / tira la rama actual.
fuente
Aunque esta pregunta es un poco vieja ... Estaba en una situación similar y mi respuesta aquí me ayudó a solucionar un problema similar que tuve
Primero intenta con
push -f
o la opción de forzarSi eso no funcionó, es posible que (como en mi caso) los repositorios remotos (o más bien las referencias a repositorios remotos que aparecen en
git remote -v
) no se actualicen.El resultado de lo anterior como su inserción sincronizó su sucursal / local con su sucursal / remota, sin embargo, la memoria caché en su repositorio local todavía muestra la confirmación previa (de la sucursal local ... siempre que solo se haya enviado una confirmación) como HEAD.
Para confirmar el clon anterior, el repositorio en una ubicación diferente e intente comparar HEAD local / branch y HEAD remoto / branch. Si ambos son iguales, entonces probablemente estés enfrentando el problema que hice.
Solución:
Ahora haga
push -f
lo siguientegit push -f github master
### Tenga en cuenta que su comando ya no tieneorigin
!Hacer un
git pull
ahoragit pull github master
en
git status
recibir# On branch master
nothing to commit (working directory clean)
Espero que esto sea útil para alguien, ya que la cantidad de vistas es tan alta que la búsqueda de este error casi siempre muestra este hilo en la parte superior
Consulte también gitref para más detalles.
fuente
En realidad, esto sucedía cuando estaba haciendo un cambio / pago con TortiseGIT.
Mi problema fue que había creado la sucursal basada en otra sucursal local. Creó una entrada de "fusión"
/.git/config
que se parecía a esto:Donde cada vez que cambiaba a la rama "web", me decía que tenía más de 100 confirmaciones antes del desarrollo. Bueno, ya no me comprometía a desarrollarme, así que eso era cierto. Pude simplemente eliminar esta entrada y parece estar funcionando como se esperaba. Se realiza un seguimiento adecuado con la referencia remota en lugar de quejarse de estar detrás de la rama de desarrollo.
Como dijo Vikram, este hilo de desbordamiento de pila es el principal resultado en Google cuando busca este problema, así que pensé en compartir mi situación y solución.
fuente
Me gustaría reiterar lo mismo mencionado por @Marian Zburlia arriba. Funcionó para mí y sugeriría lo mismo a los demás.
git pull origin develop
debe ser seguido por
$ git pull --rebase
.Esto eliminará los comentarios que surjan
$ git status
después del último tirón.fuente
git fetch
resolverá esto por tiSi mi comprensión es correcta, su local (en caché)
origin/master
está desactualizado. Este comando actualizará el estado del repositorio desde el servidor.fuente
Mi experiencia es en un entorno de equipo con muchas sucursales. Trabajamos en nuestras propias ramas de características (en clones locales) y fue una de las que
git status
mostró que tenía 11 confirmaciones por delante. Mi suposición de trabajo, como el autor de la pregunta, era que +11 era de mis propios compromisos .Resultó que había introducido cambios de la
develop
rama común en mi rama de características muchas semanas antes, ¡pero lo olvidé! Cuando volví a visitar mi sucursal local de características hoy e hice ungit pull origin develop
número, saltó a +41 confirmaciones por delante. Se había realizado mucho trabajodevelop
y, por lo tanto, mi rama de características local estaba aún más adelantada que la rama de características enorigin
repositorio.Entonces, si recibe este mensaje, piense en cualquier extracción / fusión que pueda haber hecho desde otras sucursales (propias o de otras) a las que tenga acceso. El mensaje solo indica que necesita
git push
esospull
cambios ed de nuevo alorigin
repositorio ('rama de seguimiento') de su repositorio local para sincronizar las cosas.fuente
Las respuestas que sugieren
git pull
ogit fetch
son correctas.El mensaje se genera cuando
git status
ve una diferencia entre.git/FETCH_HEAD
y.git/refs/remotes/<repository>/<branch>
(por ejemplo.git/refs/remotes/origin/master
).El último archivo registra el HEAD desde la última búsqueda (para el repositorio / rama). Hacer
git fetch
actualiza ambos archivos al HEAD actual de la sucursal.Por supuesto, si no hay nada que buscar (porque el repositorio local ya está actualizado), entonces
.git/FETCH_HEAD
no cambia.fuente
.git/FETCH_HEAD
contiene9f7336c873ccffc772168bf49807e23ff74014d3 branch 'master' of URL
y.git/refs/remotes/origin/master
contiene9f7336c873ccffc772168bf49807e23ff74014d3
, sin embargo, aún recibo el mensaje ygit pull
ni logit fetch
resuelvo ni lo resuelvoSi recibe este mensaje después de realizar una confirmación para destrabar el archivo en la rama, intente hacer algún cambio en cualquier archivo y realice la confirmación. Aparentemente, no puede realizar una confirmación única que incluye solo el seguimiento del archivo seguido anteriormente. Finalmente, esta publicación me ayudó a resolver todo el problema https://help.github.com/articles/removing-files-from-a-repository-s-history/ . Solo tuve que eliminar el archivo del historial del repositorio.
fuente