Desejo sincronizar meu repositório local com um remoto, para que meu repositório local se torne uma cópia 100% do remoto - o que significa que, se certos arquivos diferirem nesses repositórios, substituímos os locais pelos remotos e, se houver Nos repositórios locais que não existem no controle remoto, os arquivos locais são removidos.
Existe alguma maneira de conseguir isso além de fazer um novo clone do repositório remoto?
Pergunta semelhante à Sync repo git local com controle remoto em um tiro descartando alterações / confirmações locais .
git fetch --prune
Respostas:
fonte
git pull -p
faz o mesmo - 'git pull executa git fetch com os parâmetros fornecidos e chama git merge para mesclar as cabeças de ramificação recuperadas na ramificação atual' - git-scm.com/docs/git-pullgit fetch <remote> --prune
, caso alguém precise apenas de--prune
um controle remoto específico. por exemplo.git fetch upstream --prune
.git fetch origin --prune
sincronizar você repo local com o garfo de umupstream
projetoEstas etapas o farão:
então sem
-n
Isso cuidará de todas as alterações locais. Agora os commits ...
e observe a linha como:
Anote o número 'N' agora:
e finalmente:
não deve mostrar nada para adicionar / confirmar. Tudo limpo.
No entanto, um novo clone pode fazer o mesmo (mas é muito lento).
=== Atualizado ===
À medida que meu conhecimento sobre o Git melhorou um pouco ao longo do tempo, criei outra maneira mais simples de fazer o mesmo. Aqui está como (com explicação). Enquanto estiver no seu ramo de trabalho:
Embora as confirmações e alterações locais desapareçam após isso, é possível recuperar as alterações confirmadas, se necessário.
fonte
Você precisa entender que um repositório Git não é apenas uma árvore de diretórios e arquivos, mas também armazena um histórico dessas árvores - que podem conter ramificações e mesclagens.
Ao buscar em um repositório, você copiará todas ou algumas das ramificações para o repositório. Eles estão no seu repositório como "ramificações de rastreamento remoto", por exemplo, ramificações nomeadas como
remotes/origin/master
essas.A busca de novas confirmações no repositório remoto não altera nada na sua cópia de trabalho local.
Sua cópia de trabalho normalmente recebe um commit, chamado
HEAD
. Esse commit geralmente é a dica de uma de suas filiais locais.Eu acho que você deseja atualizar sua ramificação local (ou talvez todas as ramificações locais?) Para a ramificação remota correspondente e, em seguida, confira a ramificação mais recente.
Para evitar conflitos com sua cópia de trabalho (que pode ter alterações locais), limpe primeiro tudo o que não possui versão (usando
git clean
). Em seguida, verifique a ramificação local correspondente à ramificação remota para a qual deseja atualizar e use-agit reset
para alternar para a ramificação remota buscada. (git pull
incorporará todas as atualizações da ramificação remota na sua local, que pode fazer o mesmo, ou criará uma confirmação de mesclagem se você tiver confirmações locais.)(Mas você realmente perderá as alterações locais - tanto na cópia de trabalho quanto nas confirmações locais. Certifique-se de que realmente deseja isso - caso contrário, use melhor uma nova ramificação, isso salvará as confirmações locais. E use
git stash
para salvar as alterações que ainda não foram confirmadas .)Editar: se você possui apenas uma filial local e está acompanhando uma filial remota, tudo o que você precisa fazer é
de dentro do diretório de trabalho.
Isso buscará a versão atual de todas as ramificações remotas rastreadas e atualizará a ramificação atual (e o diretório de trabalho) para a versão atual da ramificação remota que está sendo rastreada.
fonte
git pull
deve ser suficiente, eu acho. (Eu atualizei a resposta.)Você quer fazer
Isso torna seu repositório local exatamente como seu repositório remoto.
Lembre-se de substituir a origem e o mestre pelo controle remoto e filial com os quais deseja sincronizar.
fonte
node_modules
, funciona exatamente como eu quero.Redefinir e sincronizar o repositório local com ramificação remota
O comando: Lembre-se de substituir a origem e o mestre pelo controle remoto e filial com os quais deseja sincronizar.
Ou passo a passo:
Sua filial local agora é uma cópia exata (confirma e tudo) da filial remota.
Saída do comando:
Aqui está um exemplo de execução do comando em um clone local do repositório Forge a git.
fonte
(Esta informação é do Manual do Usuário do Git )
Também estou aprendendo, portanto, isso pode não ser exatamente uma resposta para a pergunta, mas pode ajudar alguém:
git branch -r
)git fetch
. Isso não afetará nenhum de seus ramos criados personalizados existentes.git add origin /path/to/repository
)git checkout origin/branch_name
, isso substituirá as alterações de seus locais na filialbranch_name
fonte
Parece que você deseja um espelho do repositório remoto:
Esse comando cria um repositório vazio. Se você não quer um repositório vazio, as coisas ficam mais complicadas.
fonte
Se você estiver falando sobre a sincronização de um repositório bifurcado, siga estas etapas.
Como sincronizar um repositório de bifurcações do git
verifique seu ramo git atual
git branch
checkout para dominar se você não estiver no master
git checkout master
Busque o repositório upstream se você tiver direitos de acesso corretos
git fetch upstream
Se você estiver recebendo o erro abaixo, execute
git remote add upstream [email protected]:upstream_clone_repo_url/xyz.git
Agora execute o comando abaixo.
git fetch upstream
Agora, se você estiver no master, mescle o upstream / master no branch master
git merge upstream/master
É isso aí!!
Verificação cruzada via
git remote
comando, mais específicogit remote -v
Se eu também tiver direitos de confirmação para o repositório upstream, posso criar uma filial local upstream e fazer um trabalho que irá para lá upstream.
fonte
Você pode usar ganchos git para isso. Basta criar um gancho que empurre a alteração para o outro repositório após uma atualização.
É claro que você pode ter conflitos de mesclagem, então precisa descobrir como lidar com eles.
fonte