Как запустить git checkout -b с двухнедельной давности или с определенной даты?

#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. По сути, это тот же код, что и в вопросе.