I'm not sure... What if commits erased through forced pushes retain their ancestry? For example, branchA has commit objects A1->A2 while branchB has the same commit objects A2->A1, and then both branches are force-pushed to erase A1 and A2. Would this suffice?