отмена коммитов после успешного слияния при сохранении кода коммита слияния без изменений - PullRequest
0 голосов
/ 30 апреля 2020

Есть две ветви, которые разветвляются от master: развиваются и foo. Обе разработки и foo расходятся с мастером в результате нескольких коммитов.

foo объединен в развитие. Теперь foo и развернуть указывает на один и тот же коммит слияния, т.е. два «потока» коммитов встречаются в этом коммите слияния (извинения за приблизительный словарь).

Код в этом коммите слияния именно такой, каким и должен быть. Ничто не должно быть отменено.

Теперь давайте скажем, что никто никогда не захочет извлечь какой-либо из предыдущих коммитов foo. Итак, мы хотели бы «удалить» эти коммиты (то есть не отменять изменения, внесенные этими коммитами, просто не имея их в истории. На самом деле, глядя на историю, выглядело бы так, как будто foo никогда не существовало, и коммит слияния больше не является местом встречи двух «потоков коммитов»).

Конечно, было бы лучше, если бы foo был раздавлен до слияния в развитие, но этого не произошло.

Попытка перебазировать / squa sh foo после слияния, необходимого для решения некоторых конфликты. Поскольку код точно такой, каким он должен быть в коммите слияния, разрешение конфликтов не требуется (отказ от ответственности: возможно, эта попытка перебазирования не была предпринята надлежащим образом).

Есть ли способ сделать это

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Выполнить интерактивная перебазировка развернутой ветки. Выполнение этого позволит вам использовать sh коммитов в уже существующих коммитах. Поскольку вы переписываете историю, вы можете выбрать, какие коммиты вы хотите удалить из истории

Если вы используете более старую версию, чем git 2.23:

git checkout develop
git rebase --interactive SHA_of_last_good_commit

Если вы используете git 2.23 или более поздняя версия:

git switch develop
git rebase --interactive SHA_of_last_good_commit

Запустите rebase с -i / - интерактивным параметром, с SHA1 последней «хорошей» фиксации (т.е. родительской фиксацией той, которую мы хотим изменить). Это открывает интерактивное окно, где вы можете увидеть все коммиты от последнего «хорошего» коммита до вершины текущей ветви, перечисленные в хронологическом порядке (более старые коммиты находятся сверху файла

0 голосов
/ 30 апреля 2020

Переписать головной коммит develop:

$ git checkout develop

# move back one commit, keep all differences in the index
#  (as if you had already 'git added' them) :
$ git reset --soft HEAD^

# commit this as a simple commit :
$ git commit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...