É porque o Git registra qual commit (não uma ramificação ou uma tag, exatamente uma confirmação representada no hash SHA-1) deve ser registrada para cada submódulo. Se você alterar algo no submódulo dir, o Git irá detectá-lo e pedir que você faça essas alterações no repositório de nível superior.
Execute git diff
no repositório de nível superior para mostrar o que realmente mudou o Git pensa. Se você já fez alguns commits no seu submódulo (portanto, "limpo" no submódulo), ele relata a mudança de hash do submódulo.
$ git diff
diff --git a/src/repo b/src/repo
index b0c86e2..a893d84 160000
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit a893d84d323cf411eadf19569d90779610b10280
Caso contrário, ele mostrará -dirty
hash change que você não pode preparar ou confirmar no repositório de nível superior. git status
também afirma que o submódulo tem conteúdo não rastreado / modificado.
$ git diff
diff --git a/src/repo b/src/repo
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea-dirty
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
(commit or discard the untracked or modified content in submodules)
modified: src/repo (untracked content)
no changes added to commit (use "git add" and/or "git commit -a")
Para atualizar quais registros de confirmação devem ser verificados para o submódulo, você precisa confirmar o submódulo, além de confirmar as alterações no submódulo:
git add src/repo