Matt McCutchen [off-list ref] writes:
Then the server generates a commit X3 that lists Y2 as a parent, even
though it doesn't have Y2, and advances 'x' to X3. The victim fetches
'x':
victim server
Y1---Y2---- (Y2)
/ \ \
---O---O---X1---X2---X3 ---O---O---X1---X2---X3
Then the server rolls back 'x' to X2:
victim server
Y1---Y2----
/ \
---O---O---X1---X2---X3 ---O---O---X1---X2
Ah, I see. My immediate reaction is that you can do worse things in
the reverse direction compared to this, but your scenario does sound
bad already.