De alguma forma, quando git init
editei meu projeto mais recente há cerca de um mês, executei o comando no diretório um diretório acima da raiz do meu projeto.
Portanto, meu repositório está no ./project
diretório e não no ./project/my-new-project
diretório. Não sei como não percebi o problema antes, mas nunca procurei o diretório .git até agora.
Existe uma maneira, sem matar meu projeto, de mover o repositório para o diretório apropriado e então dizer ao git qual é a nova base do projeto? Apenas mover o diretório não funciona. Git acha que todos os arquivos foram excluídos.
Eu tive o problema oposto - tive que mudar a raiz git para o diretório pai (de projeto / src para projeto) Para minha extrema surpresa, o seguinte funcionou !!
git habilmente detectou que todos os novos arquivos foram renomeados como versões dos antigos e nenhum histórico foi perdido
Você pode tentar algo semelhante ... mova a pasta .git e adicione os arquivos novamente antes de enviar
fonte
git rm'd
os arquivos de seu local antigo, entãogit status
(corretamente) acabei relatando uma série de operações de renomeação. Quanto mais trabalho com o git, mais gosto dele..gitignore
e executeigit add -A
a pasta raiz; depois disso, o git exibiu corretamente todos os arquivos como emrenamed
vez dedeleted
. 2. Como uso submódulos, tive que mover.gitmodules
para a nova raiz e atualizar o caminho do submódulo nos vários arquivos de configuração git. Para descobrir quais arquivos modificar eu corrigrep -nrI --color 'old/path/to/submodule' .
Isso funcionou para mim e manteve toda a minha história intacta. Na pasta raiz incorreta (o pai onde você inicializou acidentalmente o repo):
Mova a pasta:
Reinicialize o repo git:
Adicione novamente todos os arquivos, confirme e envie:
Feito! Pegue uma cerveja.
Ao confirmar o repositório git após a reinicialização, você obterá uma série de saídas parecidas com estas:
Em outras palavras, todas as suas referências da pasta pai e sendo renomeadas para usar a pasta correta.
fonte
git filter-branch
permite que você reescreva a história dessa maneira. Agit filter-branch
página de manual ainda tem seu caso como exemplo :Você provavelmente deseja colocar
git clone
o repo em um novo subdiretório antes (ou depois?) Dagit filter-branch
execução. (A clonagem antes da ramificação do filtro e a execução da ramificação do filtro no novo clone teria a vantagem de deixar o.git/
diretório original como um backup, caso algo dê errado.)fonte
.git
repo permanece no nível superior enquanto os subdiretórios se tornam "considerados como a raiz") - isso literalmente descartará todos os outros arquivos no repo e moverá todos ossubdirectory/*
arquivos para a pasta raiz .git push --force
para atualizar o repositório upstream depois disso.Git pode lembrar de arquivos com seus hashes,
Basta mover o
.git
diretório raiz e dizergit
para lembrar de todas as alterações de arquivos com--all
opção.fonte
Use
git-mv
para mover seus arquivos "para cima" para o local apropriado e, em seguida, paragit-rm
o diretório "meu-novo-projeto".fonte
Eu vim aqui procurando uma maneira de mover meu repositório para qualquer lugar .
No caso, eu não fui o único, aqui está o que fiz no final:
https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F Eu "git clone --mirror" da cópia nua do meu repo e depois disse para não estar mais vazio, então os arquivos apareceram nessa nova pasta. (Em seguida, verifiquei se os arquivos e o log haviam aparecido ou não.) Mantive o repositório antigo por um tempo, apenas para garantir ...
Dessa forma, consegui mover meu repo sem perder histórico.
Saudações, Dinah
fonte
mv /path/to/the/old/location/of/the/repo /path/to/the/new/location/of/the/repo
.Tendo acabado de passar por este mesmo problema, minha solução final foi:
git reset --hard HEAD
Funcionou como mágica, sem impacto na história. - NB: Se você fez algumas alterações, certifique-se de confirmá-las antes de mover o diretório .git.
fonte
Existem duas maneiras aqui:
fonte