Как сбросить субмодуль в главную ветку репо? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть репо в github, в котором есть несколько подмодулей.Когда я запускаю git status в своем репо, я вижу, что подмодули изменены:

    modified:   ci (new commits)
    modified:   metadata (new commits)

Как я могу сбросить свой локальный подмодуль, чтобы он совпадал со ссылкой на подмодуль источника / мастера?Я пробовал git reset --hard origin/master, который только сбрасывает локальные файлы, а не подмодули.

Кроме того, у меня нет локальных изменений в этих подмодулях.Я думаю, что происходит то, что я запускаю git pull в подмодуле, который изменяет идентификатор коммита, на который ссылается мое репо.

1 Ответ

1 голос
/ 19 сентября 2019

Подмодуль - это Git-репозиторий.

Если вы хотите изменить, какой коммит извлекается из Git-репозитория, вы входите в Git-репозиторий и запускаете там git checkout.Таким образом, вы можете:

(cd ci && git checkout origin/master)

например, изменить коммит, извлеченный из репозитория Git в каталоге ci.Вы можете повторить это для подкаталога metadata, содержащего репозиторий metadata Git.

Обратите внимание, что это не меняет идентификаторы хеша фиксации, записанные в суперпроекте (текущийGit репозиторий).Список суперпроектов, чей ID хеша должен использовать суперпроект Git при запуске Git суперпроекта:

(cd <submodule> && git checkout <hash-id>)

Если вы изменили хеш-идентификаторы, вы хотели бы проверить суперпроект - введя подмодульный репозиторий Git.и, например, проверяя другие коммиты - вы должны запустить git add в суперпроекте, чтобы записать новые хэш-идентификаторы в индекс для репозитория суперпроекта:

git add ci metadata

и затем запуститьgit commit в репозитории суперпроекта, чтобы сделать новый коммит, в котором записаны эти новые хэш-идентификаторы.

Команда git submodule может сделать кое-что за вас:

git submodule update

сообщает вашемуСуперпроект Git для запуска:

(cd <submodule> && git checkout <hash-id>)

для каждого подмодуля в соответствии с хэш-идентификатором, который в данный момент хранится в индексе в суперпроекте.С другой стороны:

git submodule update --remote

заставляет ваш суперпроект Git запускать:

(cd <submodule> && git fetch && git checkout origin/master)

в каждом подмодуле.Название origin/master на самом деле зависит от настроек конфигурации;это просто по умолчанию.У git submodule update есть много дополнительных флагов, чтобы заставить его делать другие вещи.

(Я предпочитаю просто войти в подмодуль и делать все сам, чтобы я мог видеть, что я делаю.)

...