G, H, branchB branchA. , branchA branchB I, branchA, commit M - branchA, , .
As far as I know, branches are simply called headers pointing to specific commits (see .git / refs / heads), and the rest of the tree is determined solely by parent-child relationships in git. Even if you manage to reinstall JKL on a new branch B and transfer M to now free space, the object data will be identical. Both M and J will point to me as their parents, and G / D will point to C as their parents, and the rest will simply point to their immediate parent. Did I miss something?
source
share