¿Puede alguien dar un ejemplo simple de lo que causaría que un empuje de Git a un repositorio central fallara debido a que un avance rápido no podría ocurrir? ¿Para qué debería ser el repo local frente al repositorio central? Realmente tiene problemas para visualizar esto ...¿Qué significa que un empuje de Git no se puede fusionar rápidamente?
Respuesta
que asumir que se está viendo este problema:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '/Users/mayoff/t/test/central'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
Así es como “fueron rechazadas actualizaciones no avance rápido” el problema ocurre.
Digamos que Alice y Bob están trabajando en un proyecto. Cada uno de ellos tiene un repositorio, y hay un repositorio central desde el que empujan y extraen. Inicialmente, los tres repositorios este aspecto:
Ahora Alice y Bob tanto hacer algún trabajo. Cada uno se dedica un cambio diferente a su repositorio local:
A continuación, empuja Alice le cambio en el repositorio central de:
A continuación, Bob trata de empujar. La rama maestra del repositorio central apunta al compromiso 3. El empuje de Bob intenta actualizarlo para apuntar a compromiso 4. Dado que el compromiso 4 no tiene el compromiso 3 como antepasado, se requiere una fusión, pero git push
no realiza fusiones reales. Solo hace "avance rápido", donde el nuevo maestro tiene al viejo maestro como antepasado. Entonces Bob obtiene el error porque está tratando de impulsar algo que requiere una combinación real, no un avance rápido.
Para empujar con éxito, Bob tiene que ir a buscar primero la nueva confirmación desde el repositorio central de:
y tiene que fusionar sus cambios (commit # 4) con los cambios de Alice (comprometen # 3) , la creación de un nuevo compromiso que tiene tanto compromete como antepasados:
la zona de alcance y se fusionan se puede hacer de dos comandos (git fetch
seguido de git merge
) o en un comando (git pull
).
Ahora Bob puede presionar con éxito, porque el repositorio central ve que el nuevo maestro tiene el antiguo maestro como antecesor.
en cuenta que ahora Alice falta confirmaciones de Bob. Si hace más compromisos con su repositorio e intenta presionar antes de retirarse del repositorio central, recibirá el error de no avance rápido, y tendrá que buscar y fusionar para arreglarlo, al igual que Bob.
Me acabo de dar cuenta de que todas mis flechas apuntan en el sentido equivocado. Oh bien.Espero que esté lo suficientemente claro. –
Bueno, ahora muestran el desarrollo a tiempo y no el árbol git. Eso tampoco es tan malo. – erikbwork
consistencia es la clave. y apuntar en la dirección del avance del tiempo puede ser más cómodo para algunas personas. – araqnid
Simplemente haga una confirmación en el repositorio central en la misma rama sin tirar a la local. Luego, comprométase localmente e intenta empujar.
- 1. No se puede eliminar rápidamente muchos archivos en Git
- 2. ¿Qué significa FETCH_HEAD en Git?
- 3. Vista previa de un empuje de Git
- 4. ¿Por qué no puede Git fusionar los cambios de archivos con un padre/maestro modificado?
- 5. Rollback un Git fusionar
- 6. ¿Por qué a veces veo un "Nombre de archivo de entrada" no actualizado. No se puede fusionar ". después de un 'git reset --hard' y un 'git pull'?
- 7. Error de Git: no se puede encontrar
- 8. Git empuje para heroku
- 9. git-svn "No se pudo encontrar el revmap", ¿qué significa?
- 10. ¿Qué significa que "Lisp se puede escribir en sí mismo?"
- 11. Git: CABEZA ha desaparecido, que fusionar en maestro
- 12. Usando OpenSSL, ¿qué significa "no se puede escribir 'estado aleatorio'"?
- 13. Git stash pop- necesita fusionar, no se puede actualizar el índice
- 14. Git fusionar squash repetidamente
- 15. no puede averiguar qué =: = [A, B] significa
- 16. git fusionar diferentes repositorios?
- 17. ¿Qué significa git push -u?
- 18. Eclipse + Git: ¿qué significa "escenificado"?
- 19. Git 4 vías fusionar
- 20. git push >> fatal: no configurado empuje destino
- 21. Git empuje de error de regresar y no se pida confirmación de la contraseña
- 22. ¿qué significa alcanzable/inalcanzable en git?
- 23. Subversión: ¿qué significa que "la ruta de destino no existe" cuando la fusión significa?
- 24. ¿Qué significa preincrementar $ # array?
- 25. no se puede tirar, Git no puede resolver ORIG_HEAD referencia
- 26. git: ¿puedo subtree fusionar solo un subtempo de un repositorio?
- 27. ¿Cómo puedo usar git rebase sin requerir un empuje forzado?
- 28. ¿Qué significa decir que un marco "se escala bien"?
- 29. ¿Qué significa "plantilla de clase no especializada no se puede utilizar como argumento de plantilla"?
- 30. Empuje el Proyecto Git al Directorio Local
¡Excelente pregunta! Muchas personas no entienden eso, pero la mayoría de las preguntas que encontré aquí no están bien redactadas. – erikbwork