Ответ 1
Вы можете "reset" в вашем репозитории любой фиксации, которую вы хотите (например, 1 месяц назад).
Используйте git-reset для этого:
git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
Я клонировал удаленный репозиторий git около месяца назад. Удаленный репозиторий претерпел множество изменений и теперь стал нестабильным. Теперь мне нужна другая копия репозитория, версия, идентичная той, которую я клонировал месяц назад.
Как это сделать?
Вы можете "reset" в вашем репозитории любой фиксации, которую вы хотите (например, 1 месяц назад).
Используйте git-reset для этого:
git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]
Вы можете использовать просто
git checkout commithash
в этой последовательности
git clone 'URLTORepository'
cd 'into your cloned folder'
git checkout commithash
коммит хеша выглядит примерно так: "45ef55ac20ce2389c9180658fdba35f4a663d204"
Используйте git log
, чтобы найти версию, к которой вы хотите выполнить откат, и принять к сведению хеш фиксации. После этого у вас есть 2 варианта:
Если вы планируете совершить что-либо после этой ревизии, я рекомендую вам проверить новую ветку: git checkout -b <new_branch_name> <hash>
Если вы не планируете совершать что-либо после этой ревизии, вы можете просто проверить без ветки: git checkout <hash>
- ПРИМЕЧАНИЕ. Это приведет к тому, что ваш репозиторий будет размещен в отдельной записи 'state, что означает, что в данный момент он не привязан к какой-либо ветке, - тогда у вас будет дополнительная работа для объединения новых коммитов в фактический филиал.
Пример:
$ git log
commit 89915b4cc0810a9c9e67b3706a2850c58120cf75
Author: Jardel Weyrich <suppressed>
Date: Wed Aug 18 20:15:01 2010 -0300
Added a custom extension.
commit 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Author: Jardel Weyrich <suppressed>
Date: Wed Aug 18 20:13:48 2010 -0300
Missing constness.
$ git checkout 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Note: moving to '4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7'
which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 4553c14... Missing constness.
Таким образом, вы не теряете никакой информации, таким образом, вы можете перейти к более новой версии, когда она станет стабильной.
Если нужной вам версией является ветвь или тег, то:
git clone -b branch_or_tag_name repo_address_or_path
В отличие от централизованных систем управления версиями, Git клонирует весь репозиторий, поэтому вы не только получаете текущие удаленные файлы, но и всю историю. В вашем локальном репозитории будет все это.
В то время могли быть метки для обозначения определенной версии. Если нет, вы можете создать их самостоятельно. Хороший способ сделать это - использовать git log
или, возможно, более визуально с такими инструментами, как gitk
(возможно, gitk --all
, чтобы увидеть все ветки и теги). Если вы можете определить хэшисы коммитов, которые были использованы в то время, вы можете пометить их с помощью git tag <hash>
, а затем проверить их в новых рабочих копиях (например, git checkout -b new_branch_name tag_name
или непосредственно с хешем вместо имени тега).
Вы можете решить это следующим образом:
git reset --hard sha
где sha
eg: 85a108ec5d8443626c690a84bc7901195d19c446
Вы можете получить желаемую команду с помощью команды:
git log
Дерево источника, которое вы требуете, по-прежнему доступно в репозитории git, однако вам понадобится SHA1 коммита, который вас интересует. Я бы предположил, что вы можете получить SHA1 из текущего клона, который у вас есть
Если вы можете получить этот SHA1, вы можете создать ветвь / reset, чтобы иметь идентичный репозиторий.
Команды в соответствии с ответом Rui
Когда я ищу коммит определенного автора (например, я сам), я фильтрую журнал с помощью
git log --author=[authorname]
Вероятно, git reset
решает вашу проблему.
git reset --hard -#commit hash-
uploadpack.allowReachableSHA1InWant
Поскольку Git 2.5.0 эта переменная конфигурации может быть включена на сервере, здесь запрос функции GitHub и фиксация GitHub, включающая эту функцию.
Bitbucket Server включил его начиная с версии 5. 5+.
Использование:
# Make remote with 4 commits, and local with just one.
mkdir server
cd server
git init
touch 1
git add 1
git commit -m 1
git clone ./ ../local
for i in {2..4}; do
touch "$i"
git add "$i"
git commit -m "$i"
done
# Before last commit.
SHA3="$(git log --format='%H' --skip=1 -n1)"
# Last commit.
SHA4="$(git log --format='%H' -n1)"
# Failing control without feature.
cd ../local
# Does not give an error, but does not fetch either.
git fetch origin "$SHA3"
# Error.
git checkout "$SHA3"
# Enable the feature.
cd ../server
git config uploadpack.allowReachableSHA1InWant true
# Now it works.
cd ../local
git fetch origin "$SHA3"
git checkout "$SHA3"
# Error.
git checkout "$SHA4"