Eu tenho um projeto sob controle de versão do Git em que trabalhei em um servidor e no meu computador local. Originalmente, eu tinha a origem remota definida como meu computador local, mas agora gostaria de mudar isso para BitBucket.
No servidor eu usei o comando
git remote set-url origin bitbucket_address
Mas agora, quando tento empurrar meu projeto, recebo o erro
! [remote rejected] master -> master (shallow update not allowed)
O que está causando isso e como corrigi-lo?
git clone --depth
?shallow
na sua.git
pasta.shallow
arquivo.Respostas:
Como parece que você costumava
git clone --depth <number>
clonar sua versão local. Isso resulta em um clone superficial . Uma limitação desse clone é que você não pode enviá-lo para um novo repositório.Agora você tem duas opções:
Então, você quer manter sua história, não é? Isso significa que você precisa desarmar seu repositório. Para fazer isso, você precisará adicionar seu controle remoto antigo novamente.
Depois disso,
git fetch
costumamos buscar o histórico restante do controle remoto antigo (como sugerido nesta resposta ).E agora você deve poder entrar no seu novo repositório remoto.
Nota : Depois de remover o clone, você obviamente poderá remover o controle remoto antigo novamente.
fonte
git fetch --unshallow
pode ser necessário um refspec para desalocar apenas um determinado ramo, em vez de todo o repositório Por exemplo:git fetch --unshallow origin refs/heads/mydeepbranch:refs/remotes/origin/mydeepbranch
origin/master
tinha 20 commits à frente do seuoldrepo/master
quando vocêclone --depth 1
o executou, e você fez 17 commits locais desde então, basta fazer issogit fetch --depth 37 origin refs/heads/master:refs/remotes/origin/master
(desculpas por qualquer erro isolado por um) e, em seguida, você pode fazê-logit push oldrepo master
sem incidentes (pode exigir o git 1.9.0 ou mais recente).Caso o seu repo seja
origin
e o repo original sejaupstream
:fonte
Outra opção, se você deseja manter o repositório como está com os novos commits que você adicionou desde a submissão inicial rasa, é a seguinte: altere esse commit com uma nova reorganização interativa .
Inicie uma rebase interativa, incluindo a primeira confirmação (raiz) com
Altere o
pick
(s) commit (s) inicial (is)edit
e salve e feche o arquivo.Se você clonou o repositório com profundidade maior que 1, pode ser necessário fazer o mesmo para todos esses commits. Ou, alternativamente, execute
fixup
para todos eles durante o rebase interativo.Converta esse commit em um commit regular e não raso com
Isso também mudará o ID da confirmação e o adicionará como co-autor a esta confirmação inicial.
Não se esqueça de finalizar sua rebase
fonte
Se você deseja enviar por push o novo repositório como está, tente o seguinte:
old git folder
do seu repo atual,sudo rm -rf .git
git init
git remote add your-new-repo
fonte
Se buscar --unshallow não funcionar. Deve haver alguns problemas com sua filial. Corrija-o com o seguinte comando antes de pressioná-lo.
Faça isso apenas com --unshallow não funciona, pois há uma preocupação com SEGURANÇA .
fonte