как вернуться после неудачного извлечения

Я создал мелкий клон огромного репозитория (для экономии времени) с помощью

git clone --depth=1 ...

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

git тянуть

но он начал загружать намного больше информации, чем у меня было в первую очередь (мой первоначальный мелкий клон был ~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.
#

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

11
задан debamitro
09.04.2023 7:58 Количество просмотров материала 2390
Распечатать страницу

3 ответа

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

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

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

git log

commit c09ea7f2a7f01921fda4ee0b53934cba42fb9ee3
Author: That guy
Date:   The other day

This was your first commit

помните, что вам нужно только первые несколько символов фиксации ID, чтобы сбросить так с помощью:

git reset --hard c09ea7f2a7f019 

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

1
отвечен malgca 2023-04-10 15:46

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

git pull --rebase --depth=1

это будет пытаться перебазировать ваши локальные изменения после тянуть (хотя вы ничего не сделали, но git думает, что у вас есть). И тогда git должен сказать вам, что есть конфликты, потому что он найдет те же изменения в файлах. Тогда вы можете просто сделать a -

git rebase --skip

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

1
отвечен Satabdi 2023-04-10 18:03
# 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
0
отвечен bain 2023-04-10 20:20

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх