#git #git-checkout
#git #git-checkout
Вопрос:
Я пытаюсь извлечь старую версию моего кода из master
ветки и делаю следующее:
git checkout -b master_de1974 `git rev-list -n 1 --before="5 days ago" master`
Это правильная команда? Как я могу быть уверен, что получаю старый код вместо нового?
Комментарии:
1. Вы должны выполнить проверку из коммита, чтобы быть уверенным в точном снимке вашего кода. Вы можете посмотреть, «где» вы находитесь в дереве, введя
git log -n3
его, чтобы показать вам последние три коммита с текущей позиции. Таким образом, вы должны увидеть коммиты в ожидаемую дату или раньше, если ваша команда сработала2. @olibiaz и затем, имея идентификатор фиксации, какую правильную команду запустить?
3. При
git log
этом вы получаете SHA1 коммита. Тогда простоgit checkout -b <new-branch> <sha1>
. Смотрите git-scm.com/docs/git-checkout за подробностями.
Ответ №1:
Вы должны обратиться к конкретному коммиту, чтобы убедиться, что вы находитесь в точной «позиции», версии вашего кода, которую вы ожидаете.
Чтобы найти номер коммита, вы можете проверить на github / bitbucket или любом другом вашем удаленном репозитории. Если у вас нет «репозитория пользовательского интерфейса», вы можете указать свой коммит с помощью git log
команды, https://git-scm.com/docs/git-log , например:
git log -n10
отобразит 10 последних коммитов, которые были сохранены в дереве. Как только вы найдете свой коммит, вы можете создать свою новую ветку отсюда:
git checkout -b master_de1974 a9c146a09505837ec03b
Где a9c146a09505837ec03b — ваш номер фиксации. Затем вы можете быть уверены, что у вас правильная дата / фиксация, введя снова
git log -n1
Он должен показать вам коммит, к которому вы хотите вернуться.
Комментарии:
1. Но что, если вы ищете не свои коммиты, а из репозитория?
2. Команда
git log -n
возвращает все коммиты в ветке, так что это не только ваши коммиты, но и все коммиты, которые находятся в ветке, в которой вы находитесь в данный момент.
Ответ №2:
Я думаю, что это делает это (не мой ответ), я попробовал и, кажется, работает: https://gist.github.com/viktorkelemen/5101763
git checkout $(git rev-list -n1 —before=»2 недели назад» master)
Комментарии:
1. По сути, это тот же код, что и в вопросе.