Интерактивное удаление коммита в ребазе git, которое было выбрано для редактирования - PullRequest
3 голосов
/ 13 февраля 2020

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

Когда я делаю git rebase -i --root, я могу пометить все коммиты, которые (a) потенциально нуждаются в модификации, как edit, и те что (б) нужно go полностью как drop. (Примечание: список коммитов для просмотра не слишком длинный и был открыт с помощью git log --stat | grep 'commit\|name1\|name2\|...'.) При просмотре коммитов типа (a) я мог бы найти тот, который на самом деле нужно полностью удалить. Для этого я попытался rebase --skip, но, к моему удивлению, это все еще оставляет коммит на месте.

Как я могу удалить коммит во время git rebase, который я первоначально выбрал для edit изначально?

Пример:

$ git init
$ for COM in A B C; do touch $COM; git add  $COM; git commit -m "add $COM"; done
$ git rebase -i --root
<mark all as 'edit'>

<modify file and change commit>
$ echo A > A; git add A; git rebase --continue

<commit needs to go away>
$ git rebase --skip

<modify file and change commit>
$ echo C > C; git add C; git rebase --continue

Файл B все еще существует после этого.

1 Ответ

3 голосов
/ 13 февраля 2020

Вместо git rebase --skip, используйте

git reset --hard HEAD^
git rebase --continue

git reset удалит коммит.
git rebase --skip не удаляет коммит, который уже был применен в тот момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...