概要
まず大前提として git submodule は module のコミットをハッシュを管理しています
もうちょっと砕いて言うと submodule として登録したリポジトリは常に HEAD ではなく特定のコミットハッシュと紐づいています
なので git submodule update -i
をしても最新の HEAD に移動しないことがあります
今回はそんな場合に submodule 側を HEAD に移動する方法を紹介します
環境
- git 2.46.1
更新する方法
submodule のディレクトリに入って pull します
master の HEAD のコミットハッシュと新たに紐づけを行いたい場合は以下の通りです
- cd main_repo/submodule_repo
- git pull origin master
- cd …
- git status
On branch feature/test
Your branch is up to date with 'origin/feature/test'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: submodule_repo (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
こんな感じで main_repo と submodule_repo のコミット IDの紐づけが更新される差分が出ますの状態を確認すると
git submodule コマンドで紐づいているコミットIDが確認できます
+86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 api (1.1.0-233-g61128974)
プラスマークは新たに更新されている場合に表示されます
逆にマイナスマークは紐づいているコミットIDとに齟齬がある場合に表示されます
プラスもマイナスも表示されない場合は正しいコミットIDの submodule が使われていることになります
最後に
正直 submodule はややこしいのとコミットIDの管理が面倒なので使いたくないです