Страницы

Поиск по вопросам

вторник, 26 ноября 2019 г.

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


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

В общем, хочу сделать так, чтобы последнего коммита не было, но все мои файлы были такими, какие они есть сейчас.
    


Ответы

Ответ 1



Убрать последний коммит 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' Для этого тоже есть графический способ: специальная галочка в окне создания коммита:

Ответ 2



Изменение последнего коммита $ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend Все три команды вместе дают один коммит — второй коммит заменяет результат первого.

Комментариев нет:

Отправить комментарий