como voltar depois de um puxão ruim

0

Eu criei um clone superficial de um repositório enorme (para economizar meu tempo) usando

git clone --depth = 1 ...

Alguns dias depois, pensei em buscar os commits mais recentes do repositório remoto. Eu entrei

git pull

mas começou a baixar muito mais informações do que eu tinha em primeiro lugar (meu clone superficial inicial era ~ 150MB e aqui o pull já estava baixando mais de 100MB e mostrando 22%) então pressionei Ctrl-C e parei . Depois disso, eu tentei (apenas aleatoriamente)

git pull --depth = 1

e isso gerou muitos erros. E agora estou com um repositório local onde o status do git diz:

# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 4 different commits each, respectively.
#

Existe alguma maneira de acertar as coisas, além de criar um novo clone superficial? Eu não tenho meus próprios commits, então tudo é legal.

    
por debamitro 02.02.2013 / 13:34

3 respostas

1

Quando você clona um repositório com o git, você obtém o histórico completo do repo, desde o primeiro commit até o último, entretanto, desde que você fez um clone superficial, você tem apenas a profundidade do histórico que você especificou.

Se você sabe a qual commit deseja voltar, você pode tentar git reset --hard _commit_ para reverter seu HEAD, o Index e o conteúdo de seu diretório de trabalho para o que eles estavam naquele commit específico (o primeiro, neste caso).

Se você não se lembra qual é, basta usar git log para verificar os commits do que você está procurando.

git log

commit c09ea7f2a7f01921fda4ee0b53934cba42fb9ee3
Author: That guy
Date:   The other day

This was your first commit

Lembre-se de que você só precisa dos primeiros caracteres do ID de confirmação para redefinir, usando:

git reset --hard c09ea7f2a7f019 

Deve ser o suficiente para identificar o commit como único e redefinir seu HEAD, Index e conteúdo do diretório para como eles estavam naquele commit.

    
por 03.02.2013 / 01:32
1

Você também pode fazer um

git pull --rebase --depth=1

Isso tentará rebase suas alterações locais após o pull (embora você não tenha feito nada, mas o git pensa que você tem). E então o git deve dizer que existem conflitos porque encontrará as mesmas mudanças nos arquivos. Então você pode simplesmente fazer um -

git rebase --skip

i.e. você está pedindo ao git para não aplicar suas alterações locais. Deve resolver o seu problema.

    
por 03.02.2013 / 17:30
0
# delete local master and checkout remote
git branch -D master
git checkout master
# clean up any objects left by your interrupted pull
git prune
git gc
    
por 22.03.2014 / 12:10

Tags