Git

Git Как отменить последнюю фиксацию?

Git Как отменить последнюю фиксацию?
Git - эффективный инструмент, отслеживающий ваш код. И одна из замечательных особенностей инструмента - вы можете легко проверить свою историю и вернуться, если вы допустили ошибку. Давайте создадим ситуацию, в которой вы можете отменить последнюю фиксацию и посмотреть, как работает команда Git revert.

Начнем с добавления нескольких файлов. В последнем коммите мы собираемся как добавлять, так и удалять файлы, чтобы создать беспорядочную ситуацию. Затем мы вернемся к состоянию до хаоса.

Вы можете создать папку с именем / test и выполнить следующие команды для инициализации Git и создания ситуации, описанной выше (мы намеренно выполняем отдельные коммиты для создания истории):

$ git init
Инициализированный пустой репозиторий Git в / Users / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> файл_1.текст
$ git add -A
$ git commit -m "Добавление файла_1.текст"
[master (root-commit) 08caf5d] Добавление файла_1.текст
1 файл изменен, 1 вставка (+)
режим создания 100644 file_1.текст
$ echo y> файл_2.текст
$ git add -A
$ git commit -m "Добавление файла_2.текст"
[master ba18a2f] Добавление файла_2.текст
1 файл изменен, 1 вставка (+)
режим создания 100644 file_2.текст
$ echo z> file_3.текст
$ git add -A
$ git commit -m "Добавление файла_3.текст"
[master 97f09ad] Добавление file_3.текст
1 файл изменен, 1 вставка (+)
режим создания 100644 file_3.текст
$ echo u> file_4.текст
$ git add -A
$ git commit -m "Добавление файла_4.текст"
[master 9caf084] Добавление файла_4.текст
1 файл изменен, 1 вставка (+)
режим создания 100644 file_4.текст
$ echo v> file_5.текст
$ git add -A
$ git commit -m "Добавление file_5.текст"
[master 3f228b2] Добавление file_5.текст
1 файл изменен, 1 вставка (+)
режим создания 100644 file_5.текст

Если мы проверим нашу папку, мы должны увидеть следующую ситуацию:

$ ls -1
file_1.текст
файл_2.текст
file_3.текст
file_4.текст
file_5.текст

Если мы проверим историю, у нас должны быть следующие файлы:

$ git log --oneline
3f228b2 Добавление file_5.текст
9caf084 Добавление file_4.текст
97f09ad Добавление file_3.текст
ba18a2f Добавление файла_2.текст
08caf5d Добавление файла_1.текст

Теперь давайте создадим хаос, мы собираемся удалить несколько файлов и добавить плохой файл.

$ rm file_2.текст
$ rm file_4.текст
$ echo w> my_bad_file.текст
$ git add -A
$ git commit -m «Добавлял и удалял файлы, не думая о последствиях»
[master 879fbf8] Добавлял и удалял файлы, не думая о последствиях
3 файла изменено, 1 вставка (+), 2 удаления (-)
режим удаления 100644 file_2.текст
режим удаления 100644 file_4.текст
режим создания 100644 my_bad_file.текст

Теперь это состояние нашей папки:

$ ls -1
file_1.текст
file_3.текст
file_5.текст
my_bad_file.текст

И это условие нашей истории:

$ git log --oneline
879fbf8 Добавлял и удалял файлы, не думая о последствиях
3f228b2 Добавление file_5.текст
9caf084 Добавление file_4.текст
97f09ad Добавление file_3.текст
ba18a2f Добавление файла_2.текст
08caf5d Добавление файла_1.текст

Мы понимаем, что нам не нужен последний коммит 879fbf8. Итак, мы используем следующую команду revert:

$ git revert 879fbf8

Откроется текстовое окно для редактирования автоматического комментария:

Вернуть «Добавленные и удаленные файлы, не думая о последствиях»
 
Это отменяет фиксацию 879fbf849c4bd6fb9a377604d6355c76b92a832c.
 
# Пожалуйста, введите сообщение фиксации для ваших изменений. Линии начинаются
# с '#' будут проигнорированы, а пустое сообщение прервет фиксацию.
# На ветке мастера
# Изменения, которые необходимо зафиксировать:
# Новый файл: file_2.текст
# Новый файл: file_4.текст
# Удалено: my_bad_file.текст
#

Вы можете изменить комментарий. Мы собираемся оставить все как есть. Как только вы сохраните окно комментария, будет выполнено задание возврата:

$ git revert 879fbf8
[master 6e80f0e] Вернуть «Добавленные и удаленные файлы, не думая о последствиях»
3 файла изменено, 2 вставки (+), 1 удаление (-)
режим создания 100644 file_2.текст
режим создания 100644 file_4.текст
режим удаления 100644 my_bad_file.текст

Теперь посмотрим на нашу папку:

$ ls -1
file_1.текст
файл_2.текст
file_3.текст
file_4.текст
file_5.текст

Наши файлы вернулись по порядку, как и раньше. Все добавления и удаления были отменены. Проверим журнал:

$ git log --oneline
 
6e80f0e Вернуть "Добавленные и удаленные файлы, не думая о последствиях"
879fbf8 Добавлял и удалял файлы, не думая о последствиях
3f228b2 Добавление file_5.текст
9caf084 Добавление file_4.текст
97f09ad Добавление file_3.текст
ba18a2f Добавление файла_2.текст
08caf5d Добавление файла_1.текст

Есть новый коммит 6e80f0e. Любые изменения, которые были частью 879fbf8 был отменен, а затем передан в 6e80f0e.

Предупреждение: Команда сброса Git позволяет также отменять коммиты. Но в случае сброса (особенно жесткого сброса) он бы удалил 879fbf8 совершить так, как будто этого никогда не было и не было бы 6e80f0e совершить. С помощью команды возврата каждый может увидеть произошедшие изменения. В случае сброса следов не остается. Поэтому использовать команду сброса в публичном репозитории - плохая идея, потому что это может вызвать массовую путаницу. Золотое правило - не используйте сброс в публичных репозиториях, используйте возврат, который безопаснее.

В заключении:

Команда Git revert - это быстрый и удобный способ исправить ваши ошибки. Это команда, которую вам следует запомнить, если вы регулярно работаете с Git.

Дальнейшее изучение:

Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...
Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...
Как записать и транслировать игровую сессию в Linux
В прошлом игры считались только хобби, но со временем игровая индустрия увидела огромный рост с точки зрения технологий и количества игроков. Игровая ...