Git サブモジュールで Fetched in submodule path ‘{submodulePath}’, but it did not contain {hash}. Direct fetching of that commit failed. とエラーが出る

  • Git

サーバー側でサブモジュールのコミットを取り込もうとして、git submodule updateをかけたところ以下のエラーが発生しました。

fatal: remote error: upload-pack: not our ref {hash}
Fetched in submodule path '{submodulePath}', but it did not contain {hash}. Direct fetching of that commit failed.

どうやら指定された hash のコミットを submodule は持っていないよと言われているようです。

原因と解決策

自分の場合は単純な理由で、ローカルで修正したサブモジュールのコミットを、リモートに push していないだけでした。

git submodule updateは、サブモジュールに指定されたコミットハッシュ値をもとにして、特定のコミットにチェックアウトすることができます。

今回は「メインリポジトリのサブモジュールハッシュ値はローカルには存在するけど、リモートには存在していないという状態」になりチェックアウトできずにいました。当然ですね…。

そのため、サブモジュールの修正をリモートに push して、再度アップデートをかけて成功しました。