Как удалить все коммиты git
Перейти к содержимому

Как удалить все коммиты git

  • автор:

17. Удаление коммитов из ветки

Revert из предыдущего раздела является мощной командой, которая позволяет отменить любые коммиты в репозиторий. Однако, и оригинальный и «отмененный» коммиты видны в истории ветки (при использовании команды git log ).

Часто мы делаем коммит, и сразу понимаем, что это была ошибка. Было бы неплохо иметь команду «возврата», которая позволила бы нам сделать вид, что неправильного коммита никогда и не было. Команда «возврата» даже предотвратила бы появление нежелательного коммита в истории git log .

01 Команда reset

Мы уже видели команду reset и использовали ее для согласования буферной зоны и выбранного коммита (мы использовали коммит HEAD в нашем предыдущем уроке).

При получении ссылки на коммит (т.е. хэш, ветка или имя тега), команда reset …

  1. Перепишет текущую ветку, чтобы она указывала на нужный коммит
  2. Опционально сбросит буферную зону для соответствия с указанным коммитом
  3. Опционально сбросит рабочий каталог для соответствия с указанным коммитом

02 Проверьте нашу историю

Давайте сделаем быструю проверку нашей истории коммитов.

Выполните:
Результат:

Мы видим, что два последних коммита в этой ветке — «Oops» и «Revert Oops». Давайте удалим их с помощью сброса.

03 Для начала отметьте эту ветку

Но прежде чем удалить коммиты, давайте отметим последний коммит тегом, чтобы потом можно было его найти.

Выполните:

04 Сброс коммитов к предшествующим коммиту Oops

Глядя на историю лога (см. выше), мы видим, что коммит с тегом «v1» является коммитом, предшествующим ошибочному коммиту. Давайте сбросим ветку до этой точки. Поскольку ветка имеет тег, мы можем использовать имя тега в команде сброса (если она не имеет тега, мы можем использовать хэш-значение).

Выполните:
Результат:

Наша ветка master теперь указывает на коммит v1, а коммитов Oops и Revert Oops в ветке уже нет. Параметр —hard указывает, что рабочий каталог должен быть обновлен в соответствии с новым head ветки.

05 Ничего никогда не теряется

Что же случается с ошибочными коммитами? Оказывается, что коммиты все еще находятся в репозитории. На самом деле, мы все еще можем на них ссылаться. Помните, в начале этого урока мы создали для отмененного коммита тег «oops». Давайте посмотрим на все коммиты.

Выполните:
Результат:

Мы видим, что ошибочные коммиты не исчезли. Они все еще находятся в репозитории. Просто они отсутствуют в ветке master . Если бы мы не отметили их тегами, они по-прежнему находились бы в репозитории, но не было бы никакой возможности ссылаться на них, кроме как при помощи их хэш имен. Коммиты, на которые нет ссылок, остаются в репозитории до тех пор, пока не будет запущен сборщик мусора.

06 Опасность сброса

Сброс в локальных ветках, как правило, безопасен. Последствия любой «аварии» как правило, можно восстановить простым сбросом с помощью нужного коммита.

Однако, если ветка «расшарена» на удаленных репозиториях, сброс может сбить с толку других пользователей ветки.

Удалить коммиты из ветки Git

В этом посте мы обсудим, как удалить коммиты из ветки Git.

1. git сброс

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

Вы можете ссылаться на фиксацию через ее родословную, используя ее полный хэш SHA-1 или предоставляя частичный хеш, который должен быть не менее 4 символов и быть однозначным.

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

Вот живой пример:

git reset --hard

Обратите внимание, что любые изменения, сделанные в рабочем каталоге с момента последней фиксации, автоматически отбрасываются. Чтобы избежать этого, сначала спрячьте свои локальные изменения, вызвав метод git-stash команда, которая, в свою очередь, также возвращает рабочий каталог в HEAD редакцию после сохранения ваших локальных изменений. git reset —hard HEAD часто используется для удаления всех незафиксированных изменений в соответствии с самой последней фиксацией в рабочем каталоге.

Если вы хотите сохранить свою работу и только отменить фиксацию, вы можете использовать —soft вариант.

Это показано ниже:

git reset soft

2. git вернуться

Не рекомендуется выполнять принудительную отправку в общедоступный или общий репозиторий; сделать git-revert вместо. Он создает новую фиксацию, которая отменяет все указанные изменения фиксации, а затем применяет ее к текущей ветке.

# Revert the commit 87859b5
git revert 87859b5

# Push to the remote
git push

Вот живой пример:

git revert

3. Интерактивный ребейзинг

Другой вероятный способ удаления комментариев — использование git-rebase команда.

Выполнение вышеуказанной команды откроет редактор со всеми фиксациями в вашей текущей ветке, которые идут после указанной фиксации. Чтобы удалить фиксацию, просто замените команду ‘выбрать’ на ‘удалить’ и закройте редактор. Вы также можете удалить соответствующую строку.

git rebase

Следующая команда удалит всю фиксацию e78d8b1 за один раз с помощью —rebase-merges режим с —onto вариант.

rebase drop specific commit

Это все об удалении коммитов из ветки Git.

Оценить этот пост

Средний рейтинг 4.96 /5. Подсчет голосов: 23

Голосов пока нет! Будьте первым, кто оценит этот пост.

Сожалеем, что этот пост не оказался для вас полезным!

Расскажите, как мы можем улучшить этот пост?

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования ��

Как удалить историю коммитов git

Аватар пользователя Aleksandr Litvinov

Удалить историю можно полностью удалив директорию .git. На всякий случай перед этим сделайте резервную копию этой папки:

После этого можно удалить всю папку .git

Заново проинициализировать репозиторий

Добавить все файлы в рабочей области и сделать коммит

После всех этих действий вся старая история коммитов будет почищена, а новая история начнётся с коммита "первый коммит".

how to delete all commit history in github? [duplicate]

I want to delete all commit history but keep the code in its current state because, in my commit history, there are too many unused commits.

How can I do it?

Is there any git command can do this?

My code is hosted on github.com.

Christopher Bradshaw's user avatar

2 Answers 2

Deleting the .git folder may cause problems in your git repository. If you want to delete all your commit history but keep the code in its current state, it is very safe to do it as in the following:

git checkout —orphan latest_branch

Add all the files

Commit the changes

git commit -am "commit message"

Delete the branch

git branch -D main

Rename the current branch to main

git branch -m main

Finally, force update your repository

git push -f origin main

PS: this will not keep your old commit history around

marsnebulasoup's user avatar

Desta Haileselassie Hagos's user avatar

If you are sure you want to remove all commit history, simply delete the .git directory in your project root (note that it’s hidden). Then initialize a new repository in the same folder and link it to the GitHub repository:

now commit your current version of code

and finally force the update to GitHub:

However, I suggest backing up the history (the .git folder in the repository) before taking these steps!

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

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