Предыдущий ролик Следующий ролик  

Видео урок: Отмена изменений в рабочей директории

Git: обучение основам

В этой главе мы поговорим о том, как отменить изменения в Git, и это могут быть изменения, которые вы сделали в рабочей директории, изменения из буфера, и даже изменения, которые уже закоммичены в репозиторий. Довольно часто мы говорим: "Знаете что? Я хочу отменить то, что я только что сделал", и Git может нам в этом помочь. В этом ролике мы начнем с того, что рассмотрим, как отменить изменения, которые были внесены в рабочую директорию. Допустим, например, мы работаем с нашим проектом, мы внутри страницы index Export California, открываем ее, здесь вся навигация сайта, куда бы вы хотели пойти - прокручиваем вниз, и вот оно - нижняя часть этого div, удаляем.

Возможно, это было специально, потому что мы хотели это удалить, или, возможно, это было случайно, мы не хотели этого удалять. Но мы сохраняем изменение в файле, а затем закрываем его. Этот файл был изменен. Переходим в Firefox, открываем его, перегружаем страничку, навигация исчезла. Хм, это не то, чего мы хотели. Это была ошибка. И как мы можем ее исправить? Если мы перейдем в Git и напишем git status, Git покажет нам, что файл был изменен. Если мы напишем git diff, мы увидим, что было изменено.

А изменение заключается в том, что весь этот текст был изменен. Вы видите все эти минусы рядом с ним. Итак, мы хотим вернуть версию из репозитория. Мы хотим восстановить версию, которую Git сохранил для нас. Он использует эту версию для сравнения, когда мы прописываем diff. А теперь мы собираемся сказать: "Git, вернись в репозиторий, получи эту версию, сделай ее чекаут и замени ей то, что сейчас лежит в рабочей директории". Чтобы сделать это, мы используем команду git checkout. Можно написать git checkout index.html.

И я думаю, в большинстве случаем это сработает. Однако чекаут служит нескольким целям. Он также используется для работы с бранчами. Чекаут идет в репозиторий, получает именованную вещь, которую я дал, и делает так, чтобы рабочая директория выглядела также. Вот что он делает! Таким образом, если эта именованная вещь - это бранч, он приносит бранч. Если эта именованная вещь - это файл, он приносит файл. Представьте на секунду, что мы хотим сверить и перенести эту папку resources.

Пишем git checkout resources. Все хорошо, но что если у нас есть бранч с именем resources? Но Git сложно сказать, что именно нам нужно, и в данном случае он даст нам бранч resources, а не папку resources. Поэтому, хорошей практикой считается, когда мы не делаем чекаут бранча, вставлять дефис дефис (--), за которыми идет index.html. Такая команда говорит оставаться в текущем бранче. Два дефиса находятся здесь, чтобы показать, что мы не делаем чекаут нового бранча, а говорят о файле в текущем бранче.

Позже мы поговорим о переключении бранчей, и в этом случае не нужно использовать два дефиса. Но здесь мы их используем, чтобы сказать, что нужно оставаться в этом бранче и нужно получить этот файл. Мне не важно, что находится в рабочей директории. Я хочу, чтобы файл index.html из рабочей директории выглядел так, как файл из репозитория. Нажимаем Return. Вот здесь показано, что файл ушел, а затем снова вернулся. Прежде чем мы посмотрим на файл, давайте вернемся и перезагрузим веб страницу. Теперь мы видим, что в нашей рабочей директории есть меню.

Отлично, меню на месте, и если мы вернемся обратно в Git – git status – рабочая директория снова чиста. Когда мы получили эту версию, наша рабочая директория изменилась. Все на месте. Команда git checkout с двумя дефисами, а затем файл или директория, которые мы хотим вытащить из репозитория, нивелирует изменения и вернет их в то состояние, в котором они находятся в репозитории.