Как установить рабочий каталог на более старую фиксацию?
Чтобы отследить, в какой момент я нарушил функцию в своем программном обеспечении, мне нужно просмотреть старые версии моего репозитория. Я просто хочу установить рабочий каталог на более ранний фиксатор, поиграть с кодом, потом отменить изменения, а затем попробовать другой коммит.
Я не хочу ничего менять о коммитах, ни удалять, ни создавать. Я пробовал использовать 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
, который очистит ваш каталог до предыдущего коммита.