We will be migrating our TFS/TFVC repository to Git. In TFVC we used to have a trunk based development with long lasting release maintenance branches. Bug fixes on release branches have to be merged back to the trunk. Sometimes smaller features have to be carried over from trunk to a release branch. In TFVC we did this by "merging" individual (or small groups of) changesets from one branch to the other. The resulting changesets were marked as "merge", although I don't exactly know what that implies for TFVC, especially considering future merge operations.
So I imagine the branch graph to look something like this: (Although note that TFVC never displays any graphs)
-A--B--C---D--E--F--- trunk
\ / \
G--H--I--J---K--L- release-x
(Here the release branch has been created from A, I->D is a bugfix merge, E->K is a feature-forward) But maybe I'm wrong. In this case could someone explain what a TFVC merge changeset really does?
I've been told that an equivalent way of doing in Git is cherry-picking individual commits. However, on the resulting branch graphs, I don't see any link between the branches following a cherry-pick commit. I am aware that cherry-picking is not technically a merge operation and thus history relation between the branches is not carried over. Is there something I am missing? Is there a better way of carrying over such small commits from one branch to another, yet still retain some merge information? I DO NOT want to merge the entire branch. As for example changesets B,C or H must remain isolated from each other branch.