Matthieu Moy [off-list ref] writes:
I could have expected "git merge --abort" to fail, but the problem is
really more serious here: data loss is done silently before giving me an
opportunity to do or abort anything.
I think this is a well known and longstanding failure case in the
recursive merge. As it does not perform its internal operation
while handling renames in clean and distinct steps (i.e. figure out
what goes to where before touching any index entry or working tree,
then check if a proposed change to the index or the working tree
conflicts with local changes, and finally carry out the proposed
change), it is somewhat hard to fix it correctly in the current
implementation, even though you probably could patch these up case
by case basis.