Удалить первый коммит в репо - PullRequest
1 голос
/ 07 мая 2019

Я записал некоторые учетные данные в первом коммите репо, вот что: git log output:

commit 7958f03d51b0c3852bffc43bd169a121314dafca (HEAD -> master)
Author: Alexander Mills <alex@alexs-mac.local>
Date:   Tue May 7 13:14:45 2019 -0700

    modify dockerfile

commit d16acc2b2331e5afdc51d87d05b3aeb01397d4ef (origin/master)
Author: Alexander Mills <alex@alexs-mac.local>
Date:   Thu May 2 11:48:14 2019 -0700

    init

как я могу удалить первый коммит ("init")?

Я пытался:

git reset --soft HEAD~1

но это только позволит мне вернуться к первому коммиту. Если я попытаюсь git rebase -i HEAD~1, я получу:

pick 7958f03 modify dockerfile

# Rebase d16acc2..7958f03 onto d16acc2 (1 command)
#  ...

Так что нет очевидного способа удалить этот первый коммит с помощью I или git reset или git rebase ... есть ли способ каким-то образом избавиться от первого коммита?

Примечание : я могу взорвать папку репозитория .git, но в качестве упражнения некоторые люди могут иметь гораздо больше коммитов, чем 2, и хотят удалить первые или первые 5 коммитов из репо в избавиться от закодированных кредитов и т. д.

1 Ответ

2 голосов
/ 08 мая 2019

Я бы Сквош Первые два коммита (слияния в один коммит)

git rebase -i --root

Измените pick второй строки на s или squash, сохранитеthe file

Результатом является один коммит, в результате которого отображается состояние вашего текущего второго коммита.Я полагаю, вы уже удалили учетные данные во втором коммите.

Если вы уже перешли на удаленный доступ, вам необходимо принудительное нажатие с помощью git push --force.

С https://git -scm.com / docs / git-rebase :

- root

Перебазировать все доступные коммиты, вместо того, чтобы ограничивать их с помощью.Это позволяет вам перебазировать корневой коммит (ы) на ветке.При использовании с --onto он будет пропускать изменения, уже содержащиеся в (вместо), тогда как без --onto он будет работать с каждым изменением.При использовании вместе с --onto и --preserve-merges все корневые коммиты будут перезаписаны, чтобы иметь вместо них родительский.

-i --interactive

Составьте список коммитов, которые будут перебазированы.Позвольте пользователю редактировать этот список перед перебазированием.Этот режим также можно использовать для разделения коммитов (см. Раздел «Разделение коммитов» ниже).

Формат списка коммитов можно изменить, установив параметр конфигурации rebase.instructionFormat.У настроенного формата инструкции автоматически будет добавлен хеш длинного коммита.

...