Обзор команд Git для отмены изменений



Книга Обзор команд 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.




Перевод статьи: George Pipis: How to Undo Changes in Git

653   0  

Comments

    Ничего не найдено.