как вернуться после плохой мерзости

1093
debamitro

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

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. # 

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

0

3 ответа на вопрос

1
malgca

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

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

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

git log  commit c09ea7f2a7f01921fda4ee0b53934cba42fb9ee3 Author: That guy Date: The other day  This was your first commit 

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

git reset --hard c09ea7f2a7f019 

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

1
Satabdi

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

git pull --rebase --depth=1 

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

git rebase --skip 

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

Что ж, после выполнения этого «состояния git» в моем локальном хранилище видно, что все обновлено, но при проверке из удаленного хранилища по сети я вижу, что у меня нет последних коммитов. Что дальше? debamitro 11 лет назад 0
0
bain
# 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 

Похожие вопросы