He configurado un repositorio remoto no desnudo "principal" y lo he clonado en mi ordenador. Hice algunos cambios locales, actualicé mi repositorio local y empujé los cambios a mi repo remoto. Las cosas estaban bien hasta ese punto.
Ahora, tuve que cambiar algo en el repositorio remoto. Entonces cambié algo en mi repositorio local. Me di cuenta de que el cambio en el repositorio remoto no era necesario. Así que traté de git push
de mi repo local a mi repo remoto, pero me dio un error como:
Para evitar que se pierda el historial, las actualizaciones no rápidas fueron rechazado Combinar los cambios remotos antes de empujar de nuevo. Ver la 'Nota sobre fast-forwards' sección de
git push --help
para más detalles.
Pensé que probablemente un
git push --force
forzaría a mi copia local a empujar los cambios a la remota y hacerla igual. Sí que fuerza la actualización, pero cuando vuelvo al repo remoto y hago un commit, me doy cuenta de que los archivos contienen cambios obsoletos (los que tenía previamente el repo remoto principal).
Como mencioné en los comentarios a una de las respuestas:
Intenté forzar, pero cuando vuelvo al servidor principal para guardar los cambios, obtengo un staging desactualizado. Por lo tanto, cuando me comprometo los repositorios no son los mismos. Y cuando intento usar git push de nuevo, me sale el mismo error.
¿Cómo puedo solucionar este problema?
Sólo hazlo:
git push origin <your_branch_name> --force
o si tienes un repo específico:
git push https://git.... --force
Esto borrará su(s) confirmación(es) anterior(es) y empujará la actual.
Puede que no sea apropiado, pero si alguien tropieza con esta página, pensó que podría querer una solución simple...
También hay que tener en cuenta que -f
es la abreviatura de --force
, así que
git push origin <your_branch_name> -f
también funcionará.
En primer lugar, yo no haría ningún cambio directamente en el repo "principal". Si realmente quieres tener un repo "principal", entonces sólo debes empujar a él, nunca cambiarlo directamente.
En cuanto al error que recibes, ¿has probado a hacer git pull
desde tu repo local, y luego git push
al repo principal? Lo que estás haciendo actualmente (si lo he entendido bien) es forzar el push y luego perder tus cambios en el repo "principal". Deberías fusionar los cambios localmente primero.
Realmente lo recomendaría:
empujar sólo a la repo principal
asegurarse de que el repositorio principal es un repo desnudo, para no tener nunca ningún problema de que el árbol de trabajo del repositorio principal no esté sincronizado con su base .git
. Ver "¿Cómo empujar un repositorio git local a otro ordenador?"
Si tienes que hacer una modificación en el repositorio principal (desnudo), clónalo (en el servidor principal), haz tu modificación y empuja de nuevo a él
En otras palabras, mantén un repositorio desnudo accesible tanto desde el servidor principal como desde el ordenador local, con el fin de tener un único repositorio ascendente desde/hacia el que tirar/tirar.