How are code changes picked from develop branch to master branch?

Anything is possible on your own fork. That will be like
frappe=Firefox
forked_frappe=Ice weasel

You’ll have to manage your upgrades on your fork, on your own.

Ideally if you change frappe or erpnext code, send pull request so that community can discuss and merge.

Normally the bench release command does the merging/tag/release.

Customizations are to be kept in a custom app
https://frappe.github.io/frappe/user/en/guides/basics/hooks