Я создал неглубокий клон огромного хранилища (для экономии моего времени), используя

git clone --depth = 1 ...

Несколько дней спустя я подумал, что смогу получить последние коммиты из удаленного репозитория. Я вошел

мерзавец

но он начал загружать намного больше информации, чем я имел вначале (мой начальный мелкий клон был ~ 150 МБ, и здесь пул уже загружал более 100 МБ и показывал 22%), поэтому я нажал Ctrl-C и остановил его. После этого я попробовал (просто случайно)

git pull --depth = 1

и это вырвало много ошибок. И теперь у меня остался локальный репозиторий, где git status говорит:

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

Есть ли способ исправить ситуацию, кроме создания нового мелкого клона? У меня нет никаких коммитов, так что все круто.

3 ответа3

1

Вы также можете сделать

git pull --rebase --depth=1

Это попытается отменить ваши локальные изменения после извлечения (хотя вы ничего не сделали, но Git думает, что вы сделали). А затем git должен сказать вам, что существуют конфликты, потому что он найдет те же изменения в файлах. Тогда вы можете просто сделать -

git rebase --skip

то есть вы просите git не применять ваши локальные изменения. Это должно исправить вашу проблему.

1

Когда вы клонируете репо с помощью git, вы получаете полную историю репо, от первого коммита до последнего, однако, поскольку вы сделали неглубокий клон, у вас будет только та глубина, которую вы указали.

Если вы знаете, к какому коммиту вы хотите вернуться, попробуйте git reset --hard _commit_ чтобы вернуть HEAD, Index и содержимое вашего рабочего каталога к тому, что было в этом конкретном коммите (первый в этом дело).

Если вы не помните, какой это, просто используйте git log чтобы проверить коммиты для того, который вы ищете.

git log

commit c09ea7f2a7f01921fda4ee0b53934cba42fb9ee3
Author: That guy
Date:   The other day

This was your first commit

Помните, что для сброса вам нужны только первые несколько символов идентификатора фиксации, поэтому используйте:

git reset --hard c09ea7f2a7f019 

Этого должно быть достаточно, чтобы идентифицировать коммит как уникальный и сбросить содержимое HEAD, Index и директории в соответствии с тем, как они были в этом коммите.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .