Удалить предыдущий коммит из локальной и удаленной ветки - PullRequest
0 голосов
/ 23 апреля 2019

У меня в коммите есть коммиты говорят совершить А совершить B совершить C совершить D совершить E

Я должен удалить коммит D и оставить коммит A, B, C как есть. Эти коммиты уже отправлены в удаленную ветку.

Я пытался sol1 , но это не позволяло мне принудительно отправить изменения в удаленную ветвь.

Я не хочу делать git reset для коммитов A, B и C и хочу оставить их как есть.

Как это можно сделать?

1 Ответ

2 голосов
/ 23 апреля 2019

Есть два способа удалить изменения 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.

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