Упражнение. Использование GIT для исправления ошибок
Теперь давайте попрактикуемся в устранении ошибок.
Восстановление удаленного файла на практике
Сначала попробуйте удалить файл index.html:
rm index.html
Это может показаться рискованным, но помните, что Git всегда подстрахует вас!
Выполните команду
ls
, чтобы убедиться в том, что файл index.html удален:ls
Вы должны увидеть следующие выходные данные. Заметьте, что файла index.html нет.
CSS
Давайте восстановим файл index.html. Используйте команду
git checkout
, чтобы вернуть файл index.html:git checkout -- index.html
Еще раз выполните команду
ls
, чтобы проверить содержимое текущего каталога. Восстановился ли файл index.html?Да! Теперь в выходных данных должен быть указан файл index.html и каталог CSS:
CSS index.html
Восстановление удаленного файла: git rm
Когда требуется восстановить удаленные файлы, сделать это становится сложнее, если удалить их с помощью git rm
вместо rm
.
Чтобы убедиться в этом, попробуйте выполнить такую команду:
git rm index.html
Снова найдите index.html, выполнив команду
ls
. Вы не должны видеть файл index.html.Попробуйте восстановить index.html так же, как и в прошлый раз:
git checkout -- index.html
На этот раз Git сообщает, что ничего не знает о файле index.html. Причина в том, что система Git не только удалила файл, но и записала его удаление в индекс:
error: pathspec 'index.html' did not match any file(s) known to git.
Отмените подготовку удаления index.html с помощью команды
git reset
:git reset HEAD index.html
Просмотрите следующие выходные данные, подтверждающие это:
Unstaged changes after reset: D index.html
Теперь можно восстановить файл из индекса с помощью ранее использовавшейся команды:
git checkout -- index.html
Команда
git reset
отменила подготовку изменения, но файл был по-прежнему удален, поэтому, чтобы вернуть его, потребовалась командаcheckout
.Перепроверьте, что это сработало, выполнив команду
ls
.
Отмена фиксации
Давайте усложним задачу. Предположим, что вы случайно перезаписали один файл другим или внесли в файл изменение, которое оказалось ошибочным. Вы хотите вернуться к предыдущей версии файла, но уже зафиксировали изменения. В этом случае простое выполнение команды git checkout
не даст результата.
Одно из решений этой проблемы — отмена предыдущей фиксации.
Откройте файл index.html с помощью
code
:code index.html
Замените содержимое файла index.html следующим кодом:
<h1>That was a mistake!</h1>
Сохранить и закрыть файл.
Выполните следующие команды, чтобы зафиксировать изменения и вывести последнюю фиксацию:
git commit -m "Purposely overwrite the contents of index.html" index.html git log -n1
Флаг
-n1
сообщает Git, что нам нужна только самая последняя фиксация.Используйте следующие команды, чтобы попытаться восстановить файл index.html:
git checkout -- index.html
Откройте index.html в редакторе:
code index.html
Какую версию файла index.html вы видите? Старую или новую?
В этой ситуации лучше всего отменить изменение, выполнив еще одну фиксацию, которая отменяет предыдущую. Для этого служит команда
git revert
.Закройте файл и отмените зафиксированные изменения с помощью команды
git revert
:git revert --no-edit HEAD
Флаг
--no-edit
сообщает Git, что добавлять сообщение о фиксации для этого действия не нужно.Просмотрите выходные данные . Они должны выглядеть, как показано ниже:
[main 6a27310] Revert "Purposely overwrite the contents of index.html" 1 file changed, 13 insertions(+), 1 deletion(-)
Далее выполните команду
git log
, чтобы вывести последнюю фиксацию:git log -n1
Снова просмотрите выходные данные. Они должны выглядеть так, как показано в этом примере:
Author: User Name <user-name@contoso.com> Date: Tue Nov 19 23:42:26 2019 +0000 Revert "Purposely overwrite the contents of index.html" This reverts commit 15d3bded388470c98881a632025bc15190fe9d17.
Наконец, откройте файл index.html, чтобы убедиться в том, что это правильная версия содержимого.
Отмена — это не единственный способ устранения такой проблемы. Можно просто внести изменения в index.html и зафиксировать исправленный файл. Однако это не так легко, если зафиксированных изменений было много. В любом случае команда git revert
лучше подходит для данной цели.