Interactive rebase является вашим другом!
Как уже сказал:
$ git rebase -i HEAD~5
... где -i
является интерактивным флагом, и HEAD~5
средств включают в себя последние 5 коммитов в интерактивном перебазировании.
Когда вы получаете редактор вверх в результате выдачи выше, посмотрите на комментарии в открытом файле:
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
Ключ немного для вас Если удалить строку здесь COMMIT БУДЕТ ПОТЕРЯНО.
Итак, удалите строки, которые ссылаются на коммиты, от которых вы хотите избавиться, сохранить и закрыть, а git будет обрабатывать остальные (возможно, вам придется исправить некоторые конфликты в зависимости от характера фиксации и вернуть вас пытаюсь удалить).
Важно отметить, что если вы уже подтолкнули ваш код, а другие потянули его, вышеуказанное не будет работать, так как коммиты вернутся туда, в следующий раз, когда кто-то, кто проведет вашу ветку, , Интерактивная rebase удаляет коммиты в той мере, в которой их нет, поэтому другие клоны не знают, что они были удалены. В следующий раз, когда они нажимают, они попытаются повторно установить их, так как местные клоны «видят», что у источника нет объектов (коммиттов), которые вы удалили.
возможно дубликат [Git: удаление выбранного фиксации записей журнала для хранилища] (http://stackoverflow.com/questions/495345/git-removing-selected-commit-log-entries-for- a-repository) – jszakmeister
@jszakmeister: Не совсем то же самое, связанный пост хочет скомбинировать коммиты, а OP хочет здесь их удалить. – CharlesB
@CharlesB Не совсем верно. Скручивание B и C было выбором, и поэтому он снимал коммиты в вопросе OP. Ответ содержит указания обоим. – jszakmeister