Как установить рабочий каталог на более старую фиксацию?

Чтобы отследить, в какой момент я нарушил функцию в своем программном обеспечении, мне нужно просмотреть старые версии моего репозитория. Я просто хочу установить рабочий каталог на более ранний фиксатор, поиграть с кодом, потом отменить изменения, а затем попробовать другой коммит.

Я не хочу ничего менять о коммитах, ни удалять, ни создавать. Я пробовал использовать git reset, но после этого новый коммит больше не показывался. Поэтому я снова загрузил репозиторий, потому что не знал, как это сделать.

Ответы

Ответ 1

Простым git checkout old-sha1 может быть запуск, но реальная команда для такого рода задач:

git bisect.

Найти по бинарному поиску изменение, введшее ошибку

Если у вас есть script, способный проверить, работает ли ваше рабочее дерево или нет, вы можете выполнить этот script при предыдущей фиксации через git bisect, найдя первое коммит, которое прерывает ваш тест.

Обратите внимание, что эта команда еще не поддерживается напрямую GitHub для Windows: вам нужно будет открыть оболочку.


A git checkout оставит вас в отдельной голове, что не имеет значения, так как вы не внесете никаких изменений.
Чтобы вернуться, были ли вы, оформите ветку:

git checkout master

См. "Почему git отсоединил мою голову?".

Ответ 2

Вы можете проверить код в другой ветки на индекс, используя следующее:

git checkout my-other-branch .

Точка - это спецификатор пути, указывающий, что вы хотите сделать это для всего репозитория. Вы также можете указать только определенную папку. Технически вы можете указать спецификатор "tree-ish" для параметра my-other-branch, такого как тег, хеш фиксации, что-то вроде HEAD~1, ect... Если вы хотите, чтобы эти изменения были нестационарными, вы могли бы затем сделать:

git reset HEAD

Предполагая, что вы начали в чистом состоянии, теперь ваш рабочий каталог будет находиться в том же состоянии, что и my-other-branch.

Ответ 3

Используя git checkout <branch_name>, вы можете переключиться на другую доступную ветку. Если вы хотите reset ваш HEAD выполнить более старую фиксацию, вы можете попробовать следующую команду:

  • git reset --hard HEAD от 1 до reset HEAD с помощью одной фиксации
  • git reset --hard HEAD ~ 2 до reset HEAD с помощью 2 фиксирует и т.д.

Также, если у вас есть фиксация, вы можете попробовать эту команду: git reset --hard <commit> Таким образом, вы можете установить рабочий каталог на более старую фиксацию.

Чтобы полностью отказаться от изменений, вы можете попробовать: git reset --hard, который очистит ваш каталог до предыдущего коммита.