Tuve un problema similar, pero me pinté en una esquina con herramientas GUI.
Tenía un subproyecto con algunos archivos que hasta ahora había copiado en lugar de registrarme en su propio repositorio de git. Creé un repositorio en la subcarpeta, pude confirmar, enviar, etc. bien. Pero en el repositorio principal, la subcarpeta no se trataba como un submódulo, y el repositorio principal seguía rastreando sus archivos, lo cual no era bueno.
Para salir de este lío, tuve que decirle a Git que dejara de rastrear la subcarpeta (sin eliminar los archivos):
proj> git rm -r --cached ./ui/jslib
Luego tuve que decirle que había un submódulo allí (que no puede hacer si hay algo que actualmente está siendo rastreado por git):
proj> git submodule add ./ui/jslib
Actualizar
La forma ideal de manejar esto implica un par de pasos más. Idealmente, el repositorio existente se mueve a su propio directorio, libre de cualquier módulo git principal, se confirma y empuja, y luego se agrega como un submódulo como:
proj> git submodule add git@bitbucket.org:user/jslib.git ui/jslib
Eso clonará el repositorio de git como un submódulo, que implica los pasos de clonación estándar, pero también varios otros pasos de configuración más oscuros que git toma en su nombre para que ese submódulo funcione. La diferencia más importante es que coloca un archivo .git simple allí, en lugar de un directorio .git, que contiene una referencia de ruta a donde vive el directorio git real, generalmente en la raíz principal del proyecto .git / modules / jslib.
Si no haces las cosas de esta manera, funcionarán bien para ti, pero tan pronto como te comprometes y presionas al padre, y otro desarrollador va a tirar de ese padre, simplemente les harás la vida mucho más difícil. Será muy difícil para ellos replicar la estructura que tiene en su máquina siempre que tenga un directorio .git completo en una subcarpeta de un directorio que contenga su propio directorio .git.
Entonces, mover, empujar, git agregar submódulo, es la opción más limpia.