У меня есть ветка dev
, которая уже объединена с ветками featureA
и featureB
.Я слил эту ветку dev
в master
и отправил на удаленный компьютер.Позже я обнаружил, что featureB
еще не готов к слиянию с master
, так как есть ошибочный коммит.Поэтому я возвращаю это слияние dev
-> master
.
git revert -m 1 <merge-commit-hash>
Затем я пытаюсь объединить featureA
с master
.Но я не могу слиться.Он скажет Already up to date
.
Я знаю причину, как сказал Линус Торвальдс:
Линус объясняет ситуацию:
Отмена обычного коммита просто эффективно отменяет то, чтоэтот коммит сделал, и это довольно просто.Но отмена фиксации слияния также отменяет data , что фиксация изменилась, но это абсолютно ничего не влияет на history , которое имело слияние.
Таким образом, слияниевсе еще будет существовать, и все равно будет рассматриваться как объединение двух ветвей, и будущие слияния увидят, что слияние будет последним общим состоянием - и обратный ход, который отменил введенное слияние, не повлияет на это вообще.
Таким образом, «возврат» отменяет изменения данных, но это очень не «отмена» в том смысле, что он не отменяет влияния коммита на историю репозитория.
Так что если вы думаете о «возврате» как о «отмене», то вы всегда будете пропускать эту часть возвратов.Да, он отменяет данные, но нет, он не отменяет историю.
В этой ситуации единственное решение объединить это dev
снова с master
- revert the revert commit
.Но я хочу объединить только одну ветвь, включенную в ветку dev
, то есть featureA
Как я могу объединить ветку (featureA
) с основной веткой (master
), которая включена вВосстановленная ветвь слияния (dev
)?