Обзор команд Git для отмены изменений
Отменяем удаление файла
Предположим, что мы случайно удалили файл, например myfile.txt:
git rm myfile.txt
git status
Для его восстановления выполняем команду:
git restore myfile.txt
Отменяем индексирование файла
Допустим, мы по ошибке проиндексировали файл, выполнив команду git add myfilename. Для отмены этого действия воспользуемся командой:
git reset HEAD myfilenameВосстанавливаем предыдущие версии
Посмотрим, как восстановить более ранние версии в случае необходимости. С помощью команды git log переходим в историю коммитов, выбираем код SHA ранней версии (достаточно первых символов) и выполняем команду git checkout <SHA>:
git checkout 0dd6680Получаем следующее сообщение:
Внимание: переключение на '0dd6680'.
Вы находитесь в состоянии 'detached HEAD'("отсоединенный указатель HEAD"). Осмотритесь, внесите пробные изменения и зафиксируйте их. Вы можете отменить любые коммиты, выполненные в этом состоянии, ни на что не влияя при переключении обратно на ветку.
При желании можете создать новую ветку и сохранить свежие коммиты. Для этого понадобится команда switch и -c:
Пример:
git switch -c <new-branch-name>
Для отмены этой операции существует команда:
git switch -
Для отключения данного сообщения установите переменную конфигурации advice.detachedHead в значение false.
На данный момент HEAD указывает на коммит 0dd6680.Выполняем команду:
cat myfile.txtВы увидите, что находитесь в более ранней версии. Вышеприведенная команда вывода checkout объясняет ситуацию. Эти изменения можно сохранить, если создать новую ветку.
Оказавшись в состоянии “detached HEAD” вполне можно запаниковать, не зная, как вернуться к последней версии в главной ветке master. Посмотрим, как это сделать:
git checkout mainПолучаем сообщение:
Предыдущее положение HEAD указывало на коммит 0dd6680.
Переключение на ветку 'main'.
Состояние вашей ветки обновлено на 'origin/main'.Откатываем изменения на один коммит
Для отмены предыдущего коммита выполняем команду:
git revert <SHA>Удаляем неотслеживаемый файл
Допустим, вы добавили файлы, которые еще не подготовлены к коммиту. Чтобы от них избавиться, выполняем команду:
git clean -nЭто пробный запуск, который отображает файлы, подлежащие удалению. Подтверждаем выполнение этой операции командой:
git clean -fОтменяем git init
Работая с Git, вы инициализируете проект с помощью git init. Для отмены данной операции просто удаляем файл .git из каталога.
rm -rf .gitДополнительные команды: удаляем файл из удаленного репозитория
При работе с Git и GitHub/GitLab можно случайно отправить файл в удаленный репозиторий. В таком случае возникает необходимость его удалить. Рассмотрим ситуацию на примерах. Создаем удаленный репозиторий GitHub и локально его клонируем:

$ git clone https://github.com/pipinho13/delete_example.gitМеняем рабочий каталог на клонированный репозиторий. Как видно, здесь есть файлы README.md и .git.

Далее создаем файл wrong.txt, который мы отправим в удаленный репозиторий:
ls -ltraПолучаем:
total 6
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 18:57 ../
-rw-r--r-- 1 gpipis 1049089 16 Jan 13 18:57 README.md
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 18:57 .git/
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 19:12 ./
-rw-r--r-- 1 gpipis 1049089 21 Jan 13 19:12 wrong.txtОтправляем wrong.txt:
git add wrong.txt
git commit -m "pushing the wrong.txt file"
git push origin main
Файл wrong.txt добавлен в удаленный репозиторий.
Удаляем файл
При необходимости удалить файл как из удаленного каталога, так и локальной файловой системы выполняем команды:
git rm wrong.txt
git commit -m "remove the wrong.txt file"
git push origin mainКак видим, цель достигнута:

ls -ltratotal 5
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 18:57 ../
-rw-r--r-- 1 gpipis 1049089 16 Jan 13 18:57 README.md
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 19:23 ./
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 19:24 .git/Удаляем файл из удаленного репозитория Git, но сохраняем его локально
Повторяем последовательность действий по созданию файла wrong.txt, который на этот раз мы удалим только из удаленного репозитория:
ls -ltratotal 6
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 18:57 ../
-rw-r--r-- 1 gpipis 1049089 16 Jan 13 18:57 README.md
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 19:24 .git/
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 19:33 ./
-rw-r--r-- 1 gpipis 1049089 13 Jan 13 19:33 wrong.txtОтправляем файл wrong.txt:
git add wrong.txt
git commit -m "pushing the wrong.txt file again"
git push origin main
Удаляем wrong.txt только из удаленного репозитория. Для этого используем тег cached.
git rm --cached wrong.txt
git commit -m "remove the wrong.txt file only from remote repo"
git push origin mainПроверяем локальный репозиторий:
$ ls -ltratotal 6
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 18:57 ../
-rw-r--r-- 1 gpipis 1049089 16 Jan 13 18:57 README.md
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 19:33 ./
-rw-r--r-- 1 gpipis 1049089 13 Jan 13 19:33 wrong.txt
drwxr-xr-x 1 gpipis 1049089 0 Jan 13 19:38 .git/Проверяем удаленный каталог:

wrong.txt успешно удален из удаленного репозитория!
Со списком наиболее распространенных команд Git и GitHub вы можете ознакомиться по ссылке Git and GitHub Cheatsheet.
Comments