Предположим, у меня есть список коммитов: A > B > C > D > E
, как я могу удалить из истории изменения, сделанные в C, чтобы было A > B > D > E
?
Отменить или удалить изменения из предыдущей фиксации Git
Ответы (3)
Вы всегда можете отменить изменения.
git revert C
Если вы хотите переписать историю, rebase
для этого и существует. Тебе надо:
git rebase -i A
Затем удалите C из списка коммитов.
Подробное объяснение:
Первый вариант отменяет изменение, создавая новую фиксацию, противоположную исходной фиксации. Таким образом, репозиторий будет выглядеть так:
A > B > C > D > E > C`
Где C` противоположно C. В основном то же, что и patch --reverse
Второй вариант изменяет историю. rebase
позволяет выбирать конкретные коммиты, менять порядок коммитов и многое другое. Я предлагаю прочитать git-rebase. Флаг -i
предназначен для интерактивного режима, который позволяет пользователю редактировать список коммитов перед перебазированием.
Если вы удалите C из списка коммитов и выполните перебазирование, фактический вывод будет
A > B > D > E
У вас больше нет истории C в ветке.
Примечание. В обоих случаях у вас могут возникнуть конфликты в процессе. В первом случае, потому что вы применяете C` вместо E, а во втором случае, потому что вы применяете D вместо B.
попробуй git revert C
...и лучше всего также прочитать man git-revert
Вы не можете сделать это и получить A > B > D > E
. Вы всегда получите A > B > D' > E'
Чтобы удалить изменения, внесенные в C, вы можете использовать
git rebase --onto <newbase> <oldbase> <commit/branch>
в твоем случае:
git rebase --onto B C E
Это поместит изменения, внесенные в D..E
из старой базы C
, в новую базу B
(если вы не столкнетесь с какими-либо конфликтами), что приведет к
A > B > D' > E'
Важно отметить, что D
и E
получают новые идентификаторы sha, в результате чего получаются D'
и E'
, поэтому, если вы уже опубликовали C
, D
или E
, используйте метод возврата (git revert C
), иначе вы можете испортить историю других людей. .
C
, но не получить тот же идентификатор sha для E
- person mariux; 13.10.2015