Обновление подмодуля GIT * удаляет незафиксированные файлы - PullRequest
1 голос
/ 23 декабря 2010

У меня есть GIT-репозиторий и несколько SUBMODULES.

Проблема в том, что каждый раз, когда кто-то обновляет субмодуль, я пытаюсь обновить свои файлы, вызывая:

$ git submodule update

Но что происходит?он удаляет все мои незафиксированные файлы, что очень раздражает.
Я сначала попытался зафиксировать и отправить файлы, но не дал мне нажать:

error: failed to push some refs to 'ssh://dev.ancreative.co.uk/var/git/library/Blocks.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast-forward'
section of 'git push --help' for details.*

Поэтому я пытаюсь вызвать git submodule update,но затем происходит это удаление.

Кто-нибудь знает, что может вызвать эту проблему?Большое спасибо.

1 Ответ

1 голос
/ 23 декабря 2010

Обновление подмодуля git не поможет вам разрешить ситуацию «без ускоренной перемотки вперед».
Он будет только проверять ссылку, на которую ссылается родительское репо.
Не будетвытяните что угодно.

Плюс, как упомянуто в git book :

git submodule update проверяет конкретный коммит, а не кончик ветви .
Это все равно что проверить тег: голова отсоединена, поэтому вы не работаете над веткой.

$ git branch
* (no branch)
master

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

$ git checkout master

Таким образом, тот факт, что обновление удаляет ваши файлы (даже если они были зафиксированы первыми), может быть связан с тем, что вы находитесь в отдельной ветке.(Примечание: вы все равно можете вернуть свои коммиты, сделанные в этой отдельной ветке после того, как 'git submodule update' стерли все, просмотрев журнал изменений )

Как только вы окажетесь в правильной ветке внутриподмодуль, вы можете:

  • попытаться push
  • , если он выйдет из строя из-за ситуации без ускоренной перемотки вперед, вы можете git pull сначала объединиться с последнимУдаленная фиксация.
  • , затем push, снова
  • , наконец, вернитесь в родительский репозиторий и commit там, чтобы зарегистрировать новый SHA1 вашего подмодуля.
...