Я клонировал удаленный репозиторий git около месяца назад. Удаленный репозиторий претерпел множество изменений и теперь стал нестабильным. Теперь мне нужна еще одна копия репозитория, версия, идентичная той, которую я клонировал месяц назад.
Как мне это сделать?
Ответы:
Вы можете «сбросить» свой репозиторий на любую фиксацию (например, 1 месяц назад).
Для этого используйте git-reset :
источник
master
ветку, которая по умолчанию проверена на клоне. Если ветвь, отличная отmaster
вашей основной, должна быть проверена раньшеgit reset
git checkout -b new_branch hash
создание новой ветки на основе хэша, не касаясь какой-либо другой ветки. Перемещение заголовка существующей ветки могло вызвать проблемы, когда пришло время отправить что-то на удаленный сервер.git pull origin [branch]
иначе, ага, она потеряна.Вы можете просто использовать
в этой последовательности
хеш фиксации выглядит так: "45ef55ac20ce2389c9180658fdba35f4a663d204"
источник
git reset --hard
лучше избегать agit checkout commit-hash
. Agit reset --hard
удаляет часть истории git, что иногда нежелательно.git init
не обязательноИспользуйте,
git log
чтобы найти ревизию, к которой вы хотите выполнить откат, и запишите хэш фиксации. После этого у вас есть 2 варианта:Если вы планируете зафиксировать что-либо после этой ревизии, я рекомендую вам оформить заказ в новую ветку:
git checkout -b <new_branch_name> <hash>
Если вы не планируете ничего фиксировать после этой ревизии, вы можете просто оформить заказ без ветки:
git checkout <hash>
- ПРИМЕЧАНИЕ. Это переведет ваш репозиторий в состояние «отсоединенной HEAD», что означает, что в настоящее время он не прикреплен к какой-либо ветке - тогда вы у меня будет дополнительная работа по слиянию новых коммитов с реальной веткой .Пример:
Таким образом вы не потеряете никакой информации и сможете перейти к более новой версии, когда она станет стабильной.
источник
git checkout develop
где разработка - это имя вашей ветки.Если эта версия, которую вам нужно получить, является веткой или тегом, тогда:
источник
В отличие от централизованных систем контроля версий, Git клонирует весь репозиторий, поэтому вы получаете не только текущие удаленные файлы, но и всю историю. Все это будет включать ваш локальный репозиторий.
В то время могли быть теги для обозначения конкретной версии. Если нет, вы можете создать их самостоятельно локально. Хороший способ сделать это - использовать
git log
или, возможно, более визуально с такими инструментами, какgitk
(возможно,gitk --all
чтобы увидеть все ветки и теги). Если вы можете определить хэши коммитов, которые использовались в то время, вы можете пометить их с помощью,git tag <hash>
а затем проверить их в новых рабочих копиях (например,git checkout -b new_branch_name tag_name
или напрямую с помощью хеша вместо имени тега).источник
Решить это можно так:
где
sha
например:85a108ec5d8443626c690a84bc7901195d19c446
Получить желаемый ша можно командой:
источник
uploadpack.allowReachableSHA1InWant
Начиная с Git 2.5.0, эту переменную конфигурации можно включить на сервере, здесь запрос функции GitHub и фиксация GitHub включают эту функцию .
Bitbucket Server включил его с версии 5.5+ .
Применение:
источник
Требуемое вам исходное дерево все еще доступно в репозитории git, однако вам понадобится SHA1 интересующей вас фиксации. Я предполагаю, что вы можете получить SHA1 из текущего клона, который у вас есть?
Если вы можете получить этот SHA1, вы можете создать там ветку / сбросить, чтобы иметь идентичный репозиторий.
Команды согласно ответу Руи
источник
Наверное
git reset
решит вашу проблему.источник