Если я перерисовываю ваши диаграммы, чтобы разместить маркеры веток на кончике ветки (что отражает фактическое представление ветвей), ваша первоначальная ситуация будет такой:
o --- C (master)
\
--- A --- B --- D (feature)
И после перебазирования и слияния с --no-ff
как вы описываете, у вас теперь есть:
o --- C ------------------ M (master)
\ \ /
\ A' --- B' --- D' (feature)
\
--- A --- B --- D
Насколько я понимаю, вы теперь хотите убедиться, что A
, B
и D
исчезнут из вашего хранилища.Во-первых, я бы сказал, что я настоятельно рекомендую вам не беспокоиться об этих коммитах.
Однако, если вы действительно хотите от них избавиться, вам нужно будет убедиться, что они действительно недоступны,или git gc --prune=now --aggressive
не удалит их.Как таковые, они все еще будут указываться (по крайней мере) в reflog для feature
.Существуют различные способы истечения срока действия записей из reflog, например, с помощью:
git reflog expire --expire=now feature
... или более безопасным вариантом является установка переменной конфигурации gc.reflogexpireunreachable
в now
и истекает reflog:
git config gc.reflogexpireunreachable
git reflog expire feature
В любом случае вам нужно будет снова запустить git gc --prune=now --aggressive
впоследствии.
Однако, чтобы повторить то, что я сказал выше, я бы не стал делатьэто - эти коммиты никому не вредят, и reflog является ценным средством безопасности при использовании git.