Есть два способа удалить изменения D
, сохранив A
, B
, C
и E
.
Один из них - отменить D
.
git revert HEAD^
git push
Это создаст новый коммит, ~D
, после E
.Поскольку он не меняет историю, он не требует принудительного нажатия, что говорит о том, что, по вашим словам, остановило вас в предыдущей попытке решения.Это означает, что история покажет изменения от D
и их разворот;некоторым людям это не нравится, но вам, возможно, придется спросить себя, можете ли вы себе позволить это тщеславие.
Подробнее о возврате можно узнать здесь: https://git -scm.com / docs /git-revert
Другой вариант - переписать историю.Похоже, вы уже попробовали это и не смогли заставить пульт принять силовой толчок.Есть веские причины, по которым люди настраивают пульты на отказ от принудительных толчков, и хотя это зависит от вашей команды и проекта, вы должны понимать затраты, связанные с принудительным толчком.
Важно понимать, что он может Похоже, Есть много решений для физического удаления D
- ребаз, сброс, выбор вишни, возможно, даже ветвь фильтра ... Но все они сводятся к одному и тому же.Если в конце обработки вы хотите, чтобы D
(который ранее был в истории ветки) больше не будет в истории ветки, то вы пытаетесь переписать историю, и need чтобы быть в состоянии заставить толчок.Так что, если принудительный толчок - это то, что не удалось - то есть, если вы достигли состояния, когда локально у вас есть
A -- B -- C -- E'
, и вы просто не можете передать это на пульт - тогда нет смысла искать другихметоды переписывания истории;все они завершатся этапом «принудительное нажатие на пульт».
Таким образом, в этом случае единственным оставшимся параметром будет git revert
.