Egit rechazado no avance rápido

89

Recibo este mensaje mientras empujo al repositorio de github. ¿Puede decirme el procedimiento paso a paso para solucionarlo? Empujé solo una vez y fue exitoso. Pero, cuando actualicé un proyecto e intenté presionar mi segundo compromiso, muestra "maestro rechazado sin avance rápido" y no me permite presionar. Explique el procedimiento.

Arrendajo
fuente
Tengo el mismo problema después de crear un nuevo repositorio con "Inicializar este repositorio con un archivo README". Lo eliminé y volví a crear otros sin esta casilla.
andrew
@andrew tiene razón
Dany Wehbe

Respuestas:

227

Tuve este mismo problema y pude solucionarlo. afk5min tenía razón, el problema es que la rama de la que extrajo el código ha cambiado desde entonces en el repositorio remoto. Según las prácticas estándar de git ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ), necesita (ahora) fusionar esos cambios en el repositorio remoto en sus cambios locales antes de puede comprometerse. Esto tiene sentido, esto te obliga a tomar los cambios de otros y combinarlos en tu código, asegurando que tu código continúe funcionando con los otros cambios en su lugar.

De todos modos, a los escalones.

  1. Configure la 'recuperación' para obtener la rama de la que extrajo originalmente.

  2. Busca la rama remota.

  3. Fusiona esa rama remota en tu rama local.

  4. Confirme el cambio (fusión) en su repositorio local.

  5. Empuje el cambio al repositorio remoto.

En detalle...

  1. En eclipse, abra la vista 'Git Repositories'.

  2. Asegúrese de ver su repositorio local y puede ver el repositorio remoto como una subcarpeta. En mi versión, se llama Remotes, y luego puedo ver el proyecto remoto dentro de eso.

  3. Busque la flecha verde que apunta a la izquierda, esta es la flecha 'buscar'. Haga clic derecho y seleccione 'Configurar Fetch'.

  4. Debería ver el URI, asegúrese de que apunte al repositorio remoto.

  5. Busque en la sección de asignaciones de referencias de la ventana emergente. El mío estaba vacío. Esto indicará qué referencias remotas desea obtener. Haga clic en 'Agregar'.

  6. Escriba el nombre de la rama que necesita obtener del repositorio remoto. El mío era 'maestro' (por cierto, ¡¡un menú desplegable aquí sería genial !!, por ahora, tienes que escribirlo). Continúe con la ventana emergente y finalmente haga clic en 'Finalizar'.

  7. Haga clic en 'Guardar y recuperar'. Esto buscará esa referencia remota.

  8. Busque en la carpeta 'Ramas' de su repositorio local. Ahora debería ver esa rama remota en la carpeta remota. Una vez más, veo 'maestro'.

  9. Haga clic derecho en la rama local en la carpeta 'Local' de 'Ramas', que se llama 'maestra'. Seleccione 'Fusionar' y luego seleccione la rama remota, que se llama 'origen / maestro'.

  10. Proceso a través de la fusión.

  11. Confirme cualquier cambio en su repositorio local.

  12. Envíe sus cambios al repositorio remoto.

  13. Ve a tomar una bebida sabrosa, felicitándote. Tómate el resto del día libre.

Robert Bender
fuente
7
Esto debe marcarse como la respuesta. Trabajado como un encanto. Este problema ocurre aunque no agregué ningún archivo (el archivo README habitual) al crear el repositorio en GitHub para mi proyecto en Eclipse. Muchas gracias por la explicación paso a paso fácil de seguir.
rbaleksandar
Este problema me tomó un año resolverlo, hasta que leí tu publicación. En mi caso, no tenía control remoto, pero Eclipse creó uno predeterminado llamado 'origen'.
Eugene van der Merwe
Dulce, finalmente puedo fusionarme con Eclipse. El punto clave aquí es usar la vista Repositorios de Git para realizar la fusión, y no la vista habitual de sincronización de equipos. Sería bueno que en la vista de sincronización del equipo eGit pudiera haber desactivado todas las opciones que no hacen nada.
dan carter
1
Si bien esto funciona, crea una confirmación de fusión innecesaria. Debería usar rebase aquí, lo cual está bien porque sus cambios son solo locales, por lo que no está cambiando ningún historial publicado (y si lo hiciera, git le gritaría que no lo hiciera). Me gusta la respuesta de MYN.
nyuszika7h
1
Haga clic derecho en el proyecto y luego Mergeen maestro y luego haga clic derecho nuevamente en el proyecto push branch Mastertrabajado
user1207289
17

En mi caso, elegí la Force Updatecasilla de verificación mientras empujaba. Funcionó a las mil maravillas.

BSeitkazin
fuente
Esto también funcionó para mí. Tuve la condición del OP después de "modificar" un compromiso. Y buscar me dio "nada que buscar"
Twilite
11

Mientras tanto (mientras estaba actualizando su proyecto), se han realizado otras confirmaciones en la rama 'maestra'. Por lo tanto, primero debe realizar esos cambios para poder implementarlos.

afk5min
fuente
4
en este caso, git es bastante estúpido, presioné todos los cambios al control remoto. y soy el único que trabaja en el proyecto. ¿Por qué demonios necesito tirar del control remoto antes de poder presionar de nuevo? el cambio sacado provendría de mi local originalmente
Junchen Liu
7

Aplicable para Eclipse Luna + Eclipse Git 3.6.1

YO,

  1. repositorio de git clonado
  2. hizo algunos cambios en el código fuente
  3. cambios por etapas desde la vista de ensayo de Git
  4. finalmente, ¡comprométete y empuja!

Y me enfrenté a este problema con EGit y así es como lo solucioné ...

Sí, alguien confirmó los cambios antes de que yo confirmara mis cambios. Entonces se rechazan los cambios. Después de este error, los cambios se confirman realmente en el repositorio local. No quería solo Pulllos cambios porque quería mantener linear historycomo se señala en - ¿En qué casos podría ser dañino `git pull`?

Entonces, ejecuté los siguientes pasos

  1. desde la perspectiva del repositorio de Git, haga clic con el botón derecho en el
    proyecto de Git en cuestión
  2. seleccionar Fetch from Upstream: obtiene actualizaciones remotas (referencias y objetos) pero no se realizan actualizaciones localmente. para obtener más información, consulte ¿Cuál es la diferencia entre 'git pull' y 'git fetch'?
  3. seleccione Rebase...- esto abre una ventana emergente, haga clic en Preserve merges during rebasever por qué ¿
    Qué hace exactamente "rebase --preserve-merges" de git (y por qué?)
  4. haga clic en Rebase button
  5. si hay un conflict(s), vaya al paso 6, de lo contrario al paso 11
  6. Rebase Resultaparecerá una ventana emergente, simplemente haga clic enOK
  7. file comparatorse abriría, necesita modificar left side file.
  8. una vez que haya terminado de fusionar los cambios correctamente, vaya a la Git Stagingvista
  9. stage the changes. es deciradd to index
  10. en la misma vista, haga clic en Rebase-> Continue. repita de 7 a 10 hasta que se resuelvan todos los conflictos.
  11. de la Historyvista, seleccione su fila de compromiso y seleccionePush Commit
  12. seleccione la Rebase Commits of local.......casilla de verificación y haga clic en siguiente. referir por qué - Git: rebase en la rama de desarrollo desde arriba
  13. haga clic en Finish

Nota: si tiene varias confirmaciones del repositorio local, debe aplastarlas en una confirmación para evitar múltiples fusiones.

Manware Yogesh
fuente
Estoy de acuerdo con usar rebase en lugar de fusionar. Es mejor porque no crea un compromiso de fusión innecesario. (Fuera de tema: Stack Overflow está siendo completamente ridículo y rechaza mi comentario basándose únicamente en el hecho de que originalmente escribí "+1 para". Mi comentario es perfectamente constructivo, gracias).
nyuszika7h
4

Configurar Después de presionar el código cuando recibe un mensaje rechazado, haga clic en configurar y haga clic en Agregar especificación como se muestra en esta imagen

Referencia de origen y referencia de destino Desplácese hacia abajo y haga clic en ref / heads / yourbranchname y haga clic en Add Spec nuevamente

ingrese la descripción de la imagen aquí Asegúrate de seleccionar la actualización forzada

ingrese la descripción de la imagen aquí Finalmente, guarde y envíe el código al repositorio.

Vineela Thonupunuri
fuente
3

Abrir vista de git:

1- seleccione su proyecto y elija fusionar 2- Seleccione seguimiento remoto 3- haga clic en Aceptar

Git fusionará la rama remota con el repositorio local

4- luego empuja

dafali
fuente
2

Este error significa que el repositorio remoto ha tenido otras confirmaciones y se ha adelantado a su sucursal local.
Intento hacer un git pull seguido de un git push. Si no hay cambios conflictivos, git pull obtiene el código más reciente en mi sucursal local y mantiene intactos mis cambios.
Luego, un git push empuja mis cambios a la rama maestra.

Pushkin
fuente
Parece que a mucha gente le falta esta resolución simple: D
Negro
0

Descubrí que debes estar en la última confirmación del git. Así que estos son los pasos a seguir: 1) asegúrese de que no ha estado trabajando en los mismos archivos, de lo contrario se encontrará con un error DITY_WORK_TREE. 2) extraiga los últimos cambios. 3) confirma tus actualizaciones.

Espero que esto ayude.

Poderoso Elemental
fuente
-1
  1. Vaya a Github y cree un repositorio para su nuevo código.
  2. Use la nueva URL https o ssh en Eclise cuando esté haciendo el push to upstream;
adrian filipescu
fuente