Fusionar después de que el directorio se convirtió en submódulo

Me parece que al trabajar con submódulos git, a menudo encuentro problemas al fusionar entre commits que contienen un submódulo dado y aquellos que representan el mismo código que un directorio normal. Pequeño ejemplo de reproducción:

# Create one project, to be used as a subproject later on
git init a
cd a
echo aaa > aa
git add -A
git commit -m a1
cd ..

# Create a second project, containing a as a normal directory initially
git init b
cd b
mkdir a b
echo aaa > a/aa
echo bbb > b/bb
git add -A
git commit -m b1

# Replace directory with submodule
git rm -r a
git submodule add ../a a
git commit -m b2

# Try to create branch from the pre-submodule state of affairs
git checkout -b branch HEAD^

Esto ya da un error:

error: The following untracked working tree files would be overwritten by checkout:
    a/aa
Please move or remove them before you can switch branches.
Aborting

Para evitar el error, primero desinicializo todos los submódulos:

# Create feature brach starting at version without submodule
git submodule deinit .
git checkout -b branch HEAD^
echo abc > b/bb
git commit -a -m b3

Como puede ver, la rama de características no tiene relación alguna con el submódulo, modificando un conjunto diferente de archivos. Lo que hace que todo este problema sea particularmente molesto.

# Try to merge the feature branch
git checkout master
git merge branch

Esto falla nuevamente, con un mensaje de error que no entiendo completamente:

CONFLICT (file/directory): There is a directory with name a in branch. Adding a as a~HEAD
Automatic merge failed; fix conflicts and then commit the result.

Me sale el mismo error si hago ungit submodule update --init antes degit merge branch. No veo ningunoa~HEAD en cualquier lugar, ni en mi árbol de directorios ni en la salida degit status, que dice así:

On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")

Changes to be committed:

    modified:   b/bb

Unmerged paths:
  (use "git add <file>..." to mark resolution)

    added by us:     a

Si lo hagogit add a como se sugiere, recibo otro error:

error: unable to index file a
fatal: updating files failed

Si lo hagogit submodules update --init justo antes de la fusión, entonces puedo hacergit add a exitosamente. Pero si olvido hacerlo, y luego trato de hacerlo después de la fusión, recibo este mensaje de error:

Submodule 'a' (…/a) registered for path 'a'
Skipping unmerged submodule a

¿Cómo me recupero de esta situación? Algo diferente agit merge --abort, ya que me gustaría usarlo para cosas comogit rebase también, y dado que en algunos escenarios (no sé cómo reproducir), ni siquiera pude abortar la fusión limpiamente, y tuve que hacer un restablecimiento completo.

¿Cómo puedo evitarlo en primer lugar? ¿Existe alguna configuración mágica que haga que git haga lo correcto con submódulos frente a directorios durante las fusiones, de modo que no tenga que procesar manualmente una fusión que solo modifica archivos no relacionados con los submódulos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta