Когда вы работаете с подмодулями Git, состояние ваших подмодулей будет отключено HEAD по умолчанию.
Когда вы запускаете git submodule update
, это был первый раз или когда новый коммит был выдвинуткто-то еще для подмодулей, Git проверит sha1, что корневой проект говорит, что подмодуль должен быть в.
Например,
> git submodule update
> cd <submodule>
> git status
HEAD detached at 59fe3c5232
nothing to commit, working directory clean
Теперь я могу видеть больше информации, используя git log
:
> git log --all --decorate --graph --format=oneline
* 59fe3c5232 (HEAD, origin/master, master) Commit details
* 8762eca8d9 Older commit
...
Когда есть ветки, этот журнал будет более интересным: ищите HEAD
, чтобы увидеть, где вы находитесь.
На моем примере, если я сейчас это сделаю git checkout master
внутри субмодуля, я все еще на коммите, ожидаемом корневым репозиторием, но я также отслеживаю основную ветвь внутри субмодуля.
> git checkout master
> git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Но если бы я должен был получить коммит,это не то, что ожидалось от корневого репо, тогда корневое репо будет считать, что необходимо внести изменения.(Чтобы увидеть это, выполните git diff
или git status
в корневом репо.)
Если кто-то в команде отправляет коммит в субмодуль, в следующий раз я обновлю корневой репо и выполню git submodule update
Я снова окажусь в режиме отсоединения головы.
Я потрудился бы оформить ветку только в подмодуле, если я действительно работаю над этим подмодулем.