Ich kann ehrlich gesagt nicht ganz folgen. Git flow ist eigentlich ziemlich simpel. Man hat einen dev Branche auf dem aktiv gearbeitet wird. Auf Basis dieses Branch wird dann ein Feature-Branch erstellt. Wenn der Feature Branch fertig ist, wird der im optimal Fall vor dem Merge in den Dev, ordentlich getestet. Damit auch sichergestellt ist, dass der Dev immer aktuell und auch funktionsfähig ist. Wenn Beispielsweise der Sprint sich dem Ende neigt, dann wird das Release erstellt, das geht dann auf Stage und sofern alles OK ist, auf Live. Wenn es zwischenzeitlich keine Hotfixes gab, welche auch eigene Branches sein dürfen, dann wird das Release gefinished und in dev und master/Main automatisch gemerged.Tipp: Ihr solltet nur einen master-Branch haben, mehrere Release-Branches oder der dev-Branch sind ein Anti-Pattern.
Hier steht auch unter dem Punkt "Using a complicated Git workflow like git-flow" mehr: https://www.codewithjason.com/git-workflow-anti-patterns/ mehr.
Ob das Ding jetzt Master heißen darf oder Main, ist eine Frage die die Ethik-Polizei in den USA beantworten müssen.
Ob es ein Merge oder ein Rebase sein kann, gilt es im Team zu klären. Ein Sqaush-commit ist auch empfehlenswert.
Aber was daran ein Antipattern sein soll?
Schlimmer fände ich es, wenn alle auf dem Dev Branch arbeiten würden und es wahrscheinlich nicht selten vorkommen könnte, dass dieser nicht funktionsfähig ist, weil das Ding auf Maschine A läuft aber auf Maschine B nicht mehr, weil Entwickler A irgendwas direkt in den Dev gemerged hat.