Tengo un proyecto bajo el control de versiones de Git que trabajé tanto en un servidor como en mi computadora local. Originalmente tenía el origen remoto configurado como mi computadora local, pero ahora me gustaría cambiarlo a BitBucket.
En el servidor usé el comando
git remote set-url origin bitbucket_address
Pero ahora, cuando intento impulsar mi proyecto, aparece el error
! [remote rejected] master -> master (shallow update not allowed)
¿Qué está causando esto y cómo lo soluciono?
git clone --depth
?shallow
en su.git
carpeta.shallow
archivo.Respuestas:
Como parece que has usado
git clone --depth <number>
para clonar tu versión local. Esto da como resultado un clon poco profundo . Una limitación de tal clon es que no puede empujarlo a un nuevo repositorio.Ahora tiene dos opciones:
Entonces, quieres mantener tu historia, ¿eh? Esto significa que tienes que deshacer tu repositorio. Para hacerlo, deberá agregar su control remoto anterior nuevamente.
Después de eso, usamos
git fetch
para recuperar el historial restante del control remoto anterior (como se sugiere en esta respuesta ).Y ahora debería poder ingresar a su nuevo repositorio remoto.
Nota : Después de descifrar su clon, obviamente puede eliminar el control remoto anterior nuevamente.
fuente
git fetch --unshallow
puede tomar una especificación de referencia solo para anular una determinada rama en lugar de todo el repositorio. Por ejemplo:git fetch --unshallow origin refs/heads/mydeepbranch:refs/remotes/origin/mydeepbranch
origin/master
tenía 20 confirmaciones antes deoldrepo/master
cuando loclone --depth 1
editó, y ha realizado 17 confirmaciones locales desde entonces, es suficiente para que lo hagagit fetch --depth 37 origin refs/heads/master:refs/remotes/origin/master
(disculpas por cualquier error de uno por uno), y luego puede hacerlogit push oldrepo master
sin incidentes (puede requerir git 1.9.0 o más reciente).En caso de que su repositorio sea
origin
, y el repositorio original seaupstream
:fuente
Otra opción si desea mantener el repositorio tal como está con las nuevas confirmaciones que ha agregado desde la confirmación inicial superficial es la siguiente: modifique esta confirmación con un rebase interactivo .
Inicie un rebase interactivo que incluya la primera confirmación (raíz) con
Cambie la
pick
de las confirmaciones iniciales aedit
y guarde y cierre el archivo.Si ha clonado el repositorio con una profundidad mayor que 1, es posible que deba hacer lo mismo para todas esas confirmaciones. O, alternativamente, ejecute
fixup
para todos estos durante el rebase interactivo.Convierta esta confirmación en una confirmación regular, no profunda
Esto también cambiará la ID de confirmación y lo agregará como coautor a esta confirmación inicial.
No olvides terminar tu rebase
fuente
Si desea impulsar el nuevo repositorio tal como está, puede intentar esto:
old git folder
de su repositorio actual,sudo rm -rf .git
git init
git remote add your-new-repo
fuente
Si va a buscar --unshallow no funciona. Debe haber algunos problemas con su sucursal. Corríjalo con el siguiente comando antes de presionarlo.
Haga esto solo con --unshallow no funciona ya que existe una preocupación de SEGURIDAD .
fuente