Recuperar commit específico a partir de um repositório Git remoto

Existe alguma forma de recuperar apenas um compromisso específico de um reporte Git remoto sem o clonar no meu PC? A estrutura do repo remoto é absolutamente a mesma que a minha e, portanto, há'não há conflitos, mas eu não tenho idéia de como fazer isso e eu não'não quero clonar esse enorme repositório.

Eu sou novo a ir, há alguma maneira?

Você só clona uma vez, então se você já tem um clone do repositório remoto, puxando dele ganhou't faça o download de tudo novamente. Basta indicar que ramo você quer puxar, ou buscar as alterações e fazer o checkout do commit que você quer.

Buscar de um novo repositório é muito barato em largura de banda, pois só vai baixar as mudanças que você não't tem. Pense em termos de Git fazendo a coisa certa, com carga mínima.

Git armazena tudo na pasta `.git'. Um commit can't é buscado e armazenado em isolamento, ele precisa de todos os seus antepassados. Eles são interrelacionados.


Para reduzir o tamanho do download pode no entanto pedir ao git para ir buscar apenas objectos relacionados com um ramo específico ou comprometer-se:

git fetch origin refs/heads/branch:refs/remotes/origin/branch

Isto irá baixar apenas os commits contidos no ramo remoto branch (e apenas os que você perde), e armazená-lo em origin/branch. Você pode então fundir ou fazer o checkout.

Você também pode especificar apenas um compromisso SHA1:

git fetch origin 96de5297df870:refs/remotes/origin/foo-commit

Isto irá baixar apenas o commit do SHA-1 96de5297df870 especificado (e seus antepassados que você perde), e armazená-lo como (não existente) ramo remoto `origin/foo-commit'.

Comentários (9)

Fiz um puxão no meu reporte de idiota:

git pull --rebase  

Permitindo que o idiota puxasse todo o código para a filial e depois fui fazer um reset para o compromisso que me interessava.

'git reset --hard `

Espero que isto ajude.

Comentários (3)

Você pode simplesmente obter um único commit de um repo remoto com

git fetch  

onde,

  • `pode ser um nome de reporte remoto (por exemploorigin) ou mesmo um URL de reporte remoto (por exemplohttps://git.foo.com/myrepo.git`)
  • `` pode ser o commit SHA1

por exemplo

git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545

depois de teres buscado o commit (e os antepassados desaparecidos), podes simplesmente fazer o checkout com

git checkout FETCH_HEAD

Note que isto o trará no " cabeça destacada" estado.

Comentários (9)