Как отменить последний коммит в майнкрафт
Перейти к содержимому

Как отменить последний коммит в майнкрафт

  • автор:

Как отменить последний коммит в git

Drupeople.ru

Если у вас возникла ситуация, когда вы уже сделали коммит, но хотите добавить в него новые данные, можно воспользоваться командой:

git commit -a --amend

ключ —amend будет означать что нужно добавить новые изменения в последний коммит.

Если вы сделали коммит, но решили его удалить (отменить), то есть 2 варианта решения этого вопроса.

Чтобы отменить коммит, но ОСТАВИТЬ все изменения (файлы и правки в файлах НЕ будут удалены), нужно ввести команду:

git reset --soft HEAD^

ключ —soft указывает на то что изменения не будут удалены

Чтобы удалить коммит и все файлы (изменения), нужно ввести команду:

git reset --hard HEAD^

ключ —hard говорит о том, что нужно удалить и коммит и файлы

Также вместо значения HEAD^ вы можете указать hash любого другого коммита (не последнего).

Все эти способы работают если вы еще не опубликовали изменения на сервере. Если же нужно отменить коммит на сервере, нужно воспользоваться командой:

git revert *COMMIT-sha1* git push

где *COMMIT-sha1* — id вашего коммита

Отмена коммитов — Введение в Git

Git — система, в которой не нужно бояться совершать ошибки. Можно сказать, что ошибки — это единственный способ научиться им пользоваться. В Git практически всегда есть способ восстановить или изменить любые коммиты. На крайний случай спасет повторный git clone .

Что делать, если коммит уже сделан, но он нас по каким-то причинам не устраивает? Ситуаций может быть много, и все они возникают регулярно даже у профессиональных разработчиков:

  • Забыли добавить в коммит нужные файлы
  • Изменения нужно «откатить», чтобы доработать
  • Изменения больше не актуальны, и их нужно удалить
  • Изменения были сделаны по ошибке, и их нужно отменить

По большей части Git движется «только вперед». Правильный подход при работе с ним — это создавать новое, а не изменять старое.

Все ситуации, описанные выше, можно решить новым коммитом, изменяющим код в нужном направлении. Это не только удобно, но и безопасно. Изменение истории коммитов — опасная операция, которая чревата проблемами при синхронизации с удаленными репозиториями. Об этом мы поговорим позже.

Несмотря на сказанное выше, внутри Git существуют специальные команды, позволяющие упростить отмену, либо изменение коммита. С их помощью можно сделать историю коммитов понятной, а сам процесс отката — быстрым. Эти команды мы изучим в этом уроке.

Git revert

Самая простая ситуация — отмена изменений. Фактически она сводится к созданию еще одного коммита, который выполняет изменения, противоположные тому коммиту, который отменяется:

Руками создавать подобный коммит довольно сложно, поэтому в Git добавили команду, автоматизирующую откат. Эта команда называется git revert :

# Этой команде нужен идентификатор коммита # Это коммит, которым мы удалили файл PEOPLE.md git revert aa600a43cb164408e4ad87d216bc679d097f1a6c # После этой команды откроется редактор, ожидающий ввода описания коммита # Обычно сообщение revert не меняют, поэтому достаточно просто закрыть редактор [main 65a8ef7] Revert "remove PEOPLE.md" 1 file changed, 1 insertion(+) create mode 100644 PEOPLE.md # В проект вернулся файл PEOPLE.md git log -p commit 65a8ef7fd56c7356dcee35c2d05b4400f4467ca8 Author: tirion Date: Sat Sep 26 15:32:46 2020 -0400 Revert "remove PEOPLE.md" This reverts commit aa600a43cb164408e4ad87d216bc679d097f1a6c. diff --git a/PEOPLE.md b/PEOPLE.md new file mode 100644 index 0000000..4b34ba8 --- /dev/null +++ b/PEOPLE.md @@ -0,0 +1 @@ +Haskell Curry 

Команда revert может отменять не только последний коммит, но и любой другой коммит из истории проекта. Согласитесь, это очень круто. Без системы контроля версий о таком нельзя было и мечтать.

Команда git reset

Представьте, что вам нужно удалить только что сделанный по ошибке коммит. Конечно, и в этом случае подходит git revert , но так история становится менее читаемой. Если этот коммит сделан был только сейчас и еще не отправлялся на GitHub, то лучше сделать так, как будто бы этого коммита не существовало в принципе.

Git позволяет удалять коммиты. Это опасная операция, которую нужно делать только в том случае, если речь идет про новые коммиты, которых нет ни у кого, кроме вас.

Если коммит был отправлен во внешний репозиторий, например, на GitHub, то менять историю ни в коем случае нельзя. Это сломает работу у тех, кто работает с вами над проектом.

Для удаления коммита используется команда git reset :

# Добавляем новый коммит, который мы сразу же удалим echo 'test' >> INFO.md git add INFO.md git commit -m 'update INFO.md' [main 17a77cb] update INFO.md 1 file changed, 1 insertion(+) # Важно, что мы не делаем git push git reset --hard HEAD~ HEAD is now at 65a8ef7 Revert "remove PEOPLE.md" # Если посмотреть `git log`, то последнего коммита там больше нет 

У команды git reset есть множество различных флагов и способов работы. С ее помощью можно удалять коммиты, отменять их без удаления, восстанавливать файлы из истории и так далее. Работа с ней относится к продвинутому использованию Git, но здесь мы затрагиваем только самую базу.

Флаг —hard означает полное удаление. Без него git reset отменит коммит, но не удалит его, а поместит все изменения этого коммита в рабочую директорию, так что с ними можно будет продолжить работать.

Флаг HEAD~ означает «один коммит от последнего коммита». Если бы мы хотели удалить два последних коммита, то могли бы написать HEAD~2 :

HEAD (переводится как «голова») — так обозначается последний сделанный коммит. Подробнее эту терминологию мы разберем в уроке, посвященном внутреннему устройству Git.

Если не указывать флаг —hard , то по умолчанию подразумевается флаг —mixed . В таком варианте git reset отправляет изменения последнего коммита в рабочую директорию. Затем их можно исправить или отменить и выполнить новый коммит:

echo 'no code no pain' > README.md git add README.md git commit -m 'update README.md' [main f85e3a6] update README.md 1 file changed, 1 insertion(+) # Теперь откатываем последний коммит git reset HEAD~ Unstaged changes after reset: M README.md git status On branch main Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add . " to update what will be committed) (use "git restore . " to discard changes in working directory) modified: README.md 

Последнего коммита больше не существует. При этом сделанные в нем изменения не пропали. Они находятся в рабочей директории для дальнейшей доработки.

Самостоятельная работа
  1. Выполните все шаги из урока
  2. Измените добавленный текст на No code No pain
  3. Закоммитьте изменения с сообщением update README.md
  4. Залейте изменения на GitHub

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Убрать последний git-коммит, не меняя файлов проекта

У меня есть локальный репозиторий моего проекта. Там есть несколько коммитов. Последний коммит был сделан необдуманно (вспомнилось, что там есть пара проблем, которые не хотелось бы увековечивать). Я умею возвращаться к предыдущему коммиту (команда Revert). Но это не то, что мне нужно. Так я потеряю много полезного, сделанного между предыдущим коммитом и последним(необдуманным). В общем, хочу сделать так, чтобы последнего коммита не было, но все мои файлы были такими, какие они есть сейчас.

Отслеживать
26.3k 7 7 золотых знаков 32 32 серебряных знака 48 48 бронзовых знаков
задан 8 июн 2016 в 16:36
2,879 1 1 золотой знак 14 14 серебряных знаков 26 26 бронзовых знаков
Здесь есть то, что вам нужно? ru.stackoverflow.com/q/431520/181472
8 июн 2016 в 17:03
Вопрос и ответ синхронно идут )
14 июн 2016 в 19:38

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Убрать последний коммит

console

Просто удаляем последний коммит из ветки, в которой находимся. Указатель ветки перейдет на предыдущий. Все изменения, внесённые в этом коммите, останутся в рабочей области проекта (т.е. в файлах на диске).

git reset HEAD^ 

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

git reset --soft HEAD^ 

GUI

То же самое можно сделать в Android Studio: View → Tool Windows → Version Control , вкладка Log , там ПКМ по предыдущему коммиту и Reset Current Branch to Here (выбрать Soft)

введите сюда описание изображения

Отредактировать (пересоздать) последний коммит

Последний коммит был сделан необдуманно (вспомнилось, что там есть пара проблем, которые не хотелось бы увековечивать)

Этот коммит также можно отредактировать заменить новым. Просто добавьте в индекс все нужные файлы в том состоянии, которое достойно отлития в бронзе и высечения в мраморе.

git add file1 file2 folder git commit --amend --no-edit 

Ключ —amend сообщает git о том, что нужно не создавать новый коммит, а пересобрать последний. Это нельзя назвать редактированием, т.к. коммиты — неизменяемые (immutable) объекты, как строки в Java.

Ключ —no-edit сообщает git о том, что мы не хотим менять комментарий последнего коммита. Вместо него можно задать новый комментарий: git commit —amend -m’bla bla bla’

Для этого тоже есть графический способ: специальная галочка в окне создания коммита:

О git

Чтобы сделать текущую папку git репозиторием, надо выполнить команду git init. По умолчанию в созданном репозитории будет только одна ветка, и называется она master.

git для работы в интерактивном режиме или составления текстовых комментариев использует текстовый редактор. Это чаще всего Vim, который не очень удобен. В качестве git-редактора можно установить другой. Это делается с помощью команды git config –global core.editor. Например, чтобы установить редактор Notepad++ по умолчанию в ОС Windows, надо выполнить команду git config –global core.editor “’C:/Program Files/Notepad++/notepad++.exe’ –multiInst –notabbar –nosession -noPlugin” (путь к файлу, конечно же, может быть другим). Список команд для популярных редакторов можно посмотреть по ссылке: https://gist.github.com/isqua/fcafd18019b5ce61e3de31c567d7202b

Файлы в git находятся в одном из 4-х состояний:

  • untracked
  • staged
  • committed
  • modified

Посмотреть текущее состояние текущей ветки репозитория можно командой git status. Чтобы файл перевести из состояния untracked в состояние staged, надо выполнить команду git add . Перевести файл обратно из состояния staged в состояние untracked можно, выполнив команду git rm –cached (также есть и другой вариант выполнения команды – git rm –f , по факту её выполнения файл будет удалён из файловой системы). Команда git add . переводит всё содержимое текущей папки из состояния untracked в состояние staged. Чтобы перевести файлы из состояния staged в состояние committed, надо выполнить команду git commit. Если выполнить её без параметра –m , то откроется окно редактора, в котором надо будет написать комментарий к коммиту. Если выполнить команду git commit –m “описание коммита”, то шаг “открытие окна редактора” будет пропущен. Созданный коммит принадлежит той ветке в которой он был создан. Но untracked содержимое – нет, git о нём вообще не знает. Поэтому, к примеру, можно создать другую ветку и закоммитить untracked содержимое туда. Создаётся другая ветка от текущей командой git checkout –b . Чтобы переходить между существующими ветками, надо выполнять команду git checkout , то есть без -b. Посмотреть название ветки репозитория (и увидеть активную) можно через команду git branch. Новая ветка сразу после своего создания идентична той, от которой создана, то есть содержит ту же историю коммитов, а её название является указателем на тот же коммит, что и название той ветки, от которой она создаётся. Вообще, название ветки – это есть указатель на последний коммит в истории этой ветки. А HEAD в git – это указатель на последний коммит в истории текущей ветки, то есть по сути совпадает с названием текущей ветки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *