repositorio Sincronizando um repositório Git local com um remoto




remover repositorio git (7)

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 a partir de um repositório, você copiará todas ou algumas das ramificações para o seu repositório. Em seguida, eles estão no seu repositório como "ramificações de rastreamento remoto", por exemplo, ramificações nomeadas como remotas remotes/origin/master ou algo parecido.

Buscar novas confirmações do repositório remoto não alterará nada sobre sua cópia de trabalho local.

Sua cópia de trabalho normalmente tem um commit check-out, chamado HEAD . Este commit é geralmente a ponta de uma das suas ramificações locais.

Eu acho que você deseja atualizar sua filial local (ou talvez todas as filiais locais?) Para o ramo remoto correspondente e, em seguida, confira o ramo mais recente.

Para evitar qualquer conflito com sua cópia de trabalho (que pode ter alterações locais), primeiro limpe tudo o que não for versionado (usando git clean ). Em seguida, verifique a ramificação local correspondente à ramificação remota para a qual deseja atualizar e use git reset para alterná-la para a ramificação remota buscada. (O git pull irá incorporar todas as atualizações do ramo remoto em seu local, o que pode fazer o mesmo, ou criar um commit de mesclagem se você tiver commits locais).

(Mas você realmente perderá quaisquer mudanças locais - tanto na cópia de trabalho quanto nos commits locais. Certifique-se de que você realmente quer isso - caso contrário use melhor um novo branch, isso salva seus commits locais. E use git stash para salvar alterações que não são ainda comprometido.)

Edit: Se você tem apenas um ramo local e está acompanhando um ramo remoto, tudo que você precisa fazer é

git pull

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á rastreando.

Eu quero sincronizar meu repositório local com um repositório remoto para que meu repositório local se torne uma cópia de 100% do remoto - o que significa que se certos arquivos diferirem nesses repositórios, nós substituiremos os locais pelos remotos, e se houver arquivos em repositórios locais que não existem no remoto, os arquivos locais são removidos.

Existe alguma maneira de conseguir isso além de fazer um novo clone de repositório remoto?

Pergunta semelhante como Sync local git repo com remoto em um tiro descartando alterações / commits locais .


Parece que você quer um espelho do repositório remoto:

git clone --mirror url://to/remote.git local.git

Esse comando cria um repositório vazio. Se você não quer um repositório vazio, as coisas ficam mais complicadas.


Essas etapas farão isso:

git reset --hard HEAD
git clean -f -x -d -n

então sem -n

Isso cuidará de todas as alterações locais. Agora os commits ...

git status

e observe a linha como:

Your branch is ahead of 'xxxx' by N commits.

Tome nota do número 'N' agora:

git reset --hard HEAD~N
git pull

e finalmente:

git status

deve mostrar nada para adicionar / commit. Tudo limpo.

No entanto, um clone fresco pode fazer o mesmo (mas é muito lento).

=== Atualizado ===

Como o meu conhecimento melhorou ligeiramente ao longo do tempo, eu criei outra maneira mais simples de fazer o mesmo. Aqui está como (# com explicação). Enquanto no seu ramo de trabalho:

git fetch # This updates 'remote' portion of local repo. 
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.

Embora seus commits e alterações locais desapareçam de vista depois disso, é possível recuperar as alterações confirmadas, se necessário.


git fetch --prune

-p, --prune
Depois de buscar, remova qualquer ramificação de rastreamento remoto que não exista mais no controle remoto. opções de poda


Se você estiver falando sobre a sincronização de um repoque bifurcado, poderá seguir estas etapas.

Como sincronizar um repositório fork a partir do git

  1. verifique seu ramo git atual

    git branch

  2. checkout para dominar se você não estiver no master

    git checkout master

  3. Busque o repositório upstream se você tiver direitos de acesso corretos

    git fetch upstream

  4. Se você está recebendo abaixo erro, em seguida, execute

    git remote add upstream [email protected]:upstream_clone_repo_url/xyz.git

    fatal: 'upstream/master' does not appear to be a git repository  
    fatal: Could not read from remote repository.
    Please make sure you have the correct access rights and the repository exists.
    
  5. Agora, execute o comando abaixo.

    git fetch upstream

  6. Agora, se você estiver no master, mescle o upstream / master no branch master

    git merge upstream/master

    É isso aí!!

    Verificação cruzada via comando git remote , mais específico git remote -v

    Se eu também tiver direitos de commit para o repositório upstream, eu posso criar uma ramificação upstream local e fazer o trabalho que vai para o upstream lá.


(Esta informação é do Manual do Usuário do Git )

Eu também estou aprendendo, então isso pode não ser exatamente uma resposta para a pergunta, mas pode ajudar alguém:

  1. Quando um repositório remoto é clonado inicialmente, cópias de todas as ramificações são armazenadas em seu repositório local (exiba-as com git branch -r )
  2. Para atualizar essas cópias e torná-las atualizadas (ou seja, sincronizá-las com a ramificação remota), use git fetch . Isso não afetará nenhum de seus ramos criados personalizados.
  3. Para sobrescrever a verificação de filial local, uma nova versão de qualquer ramificação em que você está trabalhando (Assumindo que você já executou git add origin /path/to/repository ) use git checkout origin/branch_name , isso substituirá as alterações locais na branch branch_name

Você quer fazer

git fetch origin
git reset --hard origin/master
git clean -f -d

Isso faz com que o seu repositório local seja exatamente igual ao seu repositório remoto.

Lembre-se de substituir origem e mestre pelo controle remoto e pela ramificação com os quais deseja sincronizar.





git