Su rama está por delante de 'origen / maestro' por 3 confirmaciones


354

Recibo lo siguiente cuando ejecuto git status

Your branch is ahead of 'origin/master' by 3 commits.

He leído en alguna otra publicación que se ejecuta la forma de solucionar esto, git pull --rebasepero ¿qué es exactamente el rebase? ¿Perderé datos o es esta forma simple de sincronizar con el maestro?


19
No creo que esto sea un duplicado ... Esta pregunta es qué significa, mientras que la otra pregunta es cómo descartar los cambios.
onionjake

11
¿Cómo se marcó esto como un duplicado por tanta gente? La pregunta obviamente indica que la persona no quiere perder sus cambios. Han hecho cambios y están confundidos por el mensaje. La llamada pregunta duplicada haría que la persona perdiera sus cambios.
Derek Greer

44
Tengo que decir que la pregunta vinculada a lo anterior no es realmente un duplicado de esta pregunta ...
Dave Kanter

15
@DerekGreer: ¿cómo se marcó esto como un duplicado? Porque la mayoría de las personas que marcan las preguntas como duplicadas no se molestan en leer y comprender la pregunta. Si hay similitudes superficiales, llegarán a la conclusión de que los dos son idénticos, y dependerá del OP u otros que estén dispuestos a tomarse el tiempo para repetir cuidadosamente lo que debería haber sido obvio en primer lugar, si el los cazadores de tontos se habían preocupado de prestar atención.
iconoclasta

66
^^^ cuya práctica es matar SO, IMO.
Geek Stocks

Respuestas:


767

Recibió ese mensaje porque realizó cambios en su maestro local y no los empujó a remoto. Tiene varias formas de "resolverlo" y normalmente depende de cómo se vea su flujo de trabajo:

  • En un buen flujo de trabajo, su copia remota del maestro debe ser la buena, mientras que su copia local del maestro es solo una copia de la del remoto. Al usar este flujo de trabajo, nunca volverá a recibir este mensaje.
  • Si trabaja de otra manera y sus cambios locales deben ser empujados, entonces solo git push originasumiendo que el origen es su control remoto
  • Si sus cambios locales son incorrectos, simplemente elimínelos o restablezca su maestro local al estado remoto git reset --hard origin/master

82
git reset: origen duro / maestro es exactamente lo que estaba buscando. Gracias.
FluxEngine

44
@iberbeu resolviste mi día ... git reset - origen duro / maestro es lo que estoy buscando. + 1ed
Ravi

75
También fwiw git diff master origin/master(es decir git diff local remote) para ver los cambios que eliminará
Shanimal

1
Tengo local / master en el origen / rama remoto, por lo git push origin master:branchque utilicé el que regresó Everything up-to-date, después de eso, el mensaje de estar por delante por x commits desapareció.
fyrye

2
¡El último me consiguió lo que necesitaba allí!
RyanG

38

No hay nada que arreglar. Simplemente ha realizado 3 confirmaciones y aún no las ha movido a la rama remota. Hay varias opciones, según lo que quieras hacer:

  • git push: mueva sus cambios al control remoto (esto podría ser rechazado si ya hay otros cambios en el control remoto)
  • no hacer nada y seguir codificando, sincronizar otro día
  • git pull: obtenga los cambios (si los hay) del control remoto y combínelos en sus cambios
  • git pull --rebase: como arriba, pero intente rehacer sus confirmaciones además de los cambios remotos

Se encuentra en una situación clásica (aunque generalmente no se comprometería mucho en master en la mayoría de los flujos de trabajo). Esto es lo que normalmente haría: revisar mis cambios. Tal vez haga un git rebase --interactivepoco de cosméticos, deje caer los que apestan, reordenarlos para que sean más lógicos. Ahora muévalos al control remoto con git push. Si esto se rechaza porque mi sucursal local no está actualizada: git pull --rebaserehacer mi trabajo además de los cambios más recientes y git pushnuevamente.


Usé git pull --rebase, pero ahora dice que estoy adelante por un commit
FluxEngine

Así que hice los cambios, empujé para dominar, y luego nuestro líder de equipo se fusionó con el maestro. Entonces, los cambios están ahí, solo necesito sincronizarme con el maestro actual.
FluxEngine

@MartyMcFly Es difícil ver qué está pasando aquí. ¿Dices que ya empujaste? Entonces, ¿por qué sigues cometiendo que no están en master? ¿Qué quieres decir con your team lead merged to master? ¿No dijiste que ya presionaste para dominar? ¿Qué contiene el commit adicional? Intente git diff origin/masterver en qué se diferencia su sucursal local de la remota.
pmr

1
gracias por la ayuda, perdón si hice un mal trabajo explicando la situación. Pero lo que estaba buscando es git reset: origen duro / maestro. Pero su respuesta fue útil +1.
FluxEngine

Parece que estoy atrapado entre una roca y un lugar difícil, traté de cometer cambios, luego git dijo: estás por delante de 11 commits. No tengo permiso para actualizar el repositorio remoto, por lo que no es posible un envío. "git pull" dice: Ya actualizado. Así que probé tu tercera sugerencia, pero luego git dice: no se puede tirar con rebase: tienes cambios sin clasificar. por favor, confírmalos o guárdalos. Duh, así es como llegué aquí en primer lugar :-(
Sander de Jong

36

Use estos 4 comandos simples

Paso 1 :git checkout <branch_name>

Esto es obvio para entrar en esa rama.

Paso 2 :git pull -s recursive -X theirs

Tome los cambios de rama remotos y reemplácelos con sus cambios si surgen conflictos. Aquí, si lo haces git status, obtendrás algo como esto: tu rama está por delante de 'origen / maestro' en 3 confirmaciones.

Paso 3 :git reset --hard origin/<branch_name>

Paso 4 :git fetch

Restablecimiento completo de su rama.

Disfrutar.


17

Encontré este problema después de fusionar una solicitud de extracción en Bitbucket.

Tuve que hacer

git fetch

y eso fue todo.


2
Estaba trabajando con un repositorio de un paquete y pude deshacerme del mensaje aplicando "git fetch" a un paquete actual. tnx!
Martin Meeser

En una comprobación de solo lectura, mi estado de git mostró que tenía 2 confirmaciones por delante, el registro se veía como debería: todas las confirmaciones en el origen. Hice un git pull y tenía 5 commits por delante ... Solo necesitaba buscar para actualizar los índices locales ... todo bien :)
Chris Rutledge

12

Por lo general, si tengo que verificar cuáles son las confirmaciones que difieren del maestro que hago:

git rebase -i origin/master

De esta manera puedo ver los commits y decidir soltarlos o elegir ...


Esta respuesta humilde hasta aquí fue lo que tenía que hacer. No podía entender cómo encontrar la diferencia, y todas mis diversas git diff ...magias no funcionarían. Cuando hice esto, me dio noopel único compromiso, y cuando lo acepté, ahora mi rama está sincronizada con origin / master. Por lo tanto, parece que los commits diff del origen / master no fueron en efecto nada.
philo vivero

11

Este mensaje de gitsignifica que ha realizado tres confirmaciones en su repositorio local y no las ha publicado en el masterrepositorio. El comando para ejecutar eso es git push {local branch name} {remote branch name}.

El comando git pull(y git pull --rebase) es para la otra situación cuando hay commit en el repositorio remoto que no tiene en su repositorio local. La --rebaseopción significa que gitmoverá su confirmación local a un lado, se sincronizará con el repositorio remoto y luego intentará aplicar sus tres confirmaciones desde el nuevo estado. Puede fallar si hay un conflicto, pero luego se le pedirá que los resuelva. También puede abortar rebasesi no sabe cómo resolver los conflictos mediante el uso git rebase --aborty volverá al estado antes de ejecutarlo git pull --rebase.


7

Si tu git dice que estás comprometido, entonces solo Primero,

origen de empuje git

Para asegurarse de que ha empujado todo su último trabajo en repositorio

Entonces,

git reset - origen duro / maestro

Para restablecer y combinar con el repositorio


4

Esto me sucedió una vez después de fusionar una solicitud de extracción en Bitbucket.

Solo tenía que hacer:

git fetch

Mi problema fue resuelto. ¡¡¡Espero que esto ayude!!!


0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

finalmente:

$ git push origin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.